Post

<오라클 성능 고도화 원리와 해법1> Ch03-12 데이터베이스 성능 고도화 정석 해법

오라클 성능 고도화 원리와 해법1 - Ch03-12 데이터베이스 성능 고도화 정석 해법

모든 문제 해결 프로세스처럼 데이터베이스도 그림 3-15와 같은 절차에 따라 문제를 해결해 나간다.

지금까지 설명한 내용을 통해 성능 튜닝에 필요한 자료를 수집하고, 분석 및 진단하는 방법에 대해 어느 정도 배경 지식을 갖게 되었을 것이다. 특히, OWI에 기반한 대기 이벤트 분석을 통해 얼마나 쉽고 빠르게 문제의 발생 원인을 찾아낼 수 있는지 알 수 있었다. 4단계, 성능 평가도 1~2단계와 같은 방법으로 시행할 수 있다. 직접 해보면, 이 부분에서도 OWI의 가치를 충분히 느낄 수 있다. 대기 이벤트 발생 정보를 포함해 AWR에 저장된 수많은 성능 통계 자료를 분석해 정량적으로 튜닝 전후를 비교해 보일 수 있기 때문이다. 그림 3-16은 인덱스 설계 및 SQL 튜닝 결과를 일요일 야간에 운영 서버에 일괄 반영하고, 그 결과를 평가하기 위해 반영 전후 일주일간 대기 이벤트 발생 상황을 도표화한 것이다.

본 장을 마치고 4장부터 3단계, ‘튜닝’에 대한 설명을 본격적으로 진행하려고 한다. 개별적이고 사후적 조치 성격이 강한 ‘튜닝’ 개념을 넘어서 시스템 전반의 성능 고도화를 이루는데 필요한 핵심 원리에 대해 설명한다.

분석 기법이 좋아졌다고 해서 튜닝의 핵심적인 정석 원리까지 바뀌는 것은 아니다. Ratio 기반 분석 방법론을 사용하든 대기 이벤트 기반 분석 방법론을 사용하든 성능 진단과 분석 과정을 통해 여러 가지 튜닝 방안들이 제시될 수 있지만, 실제 튜닝 업무를 수행하는 성능 관리자들이 공통으로 느끼는 것은, 대부분 데이터베이스 성능 문제가 애플리케이션 튜닝으로 귀결된다는 사실이다. SQL을 한 번만 수행해도 같은 결과를 얻을 수 있는데 불필요하게 많은 SQL을 수행하거나, 파싱을 많이 일으키거나, 많은 데이터를 Fetch하거나, 많은 I/O를 일으키도록 구현하는 것이 성능 문제를 일으키는 90%, 아니 99% 요인을 차지한다. 따라서 데이터베이스 성능 튜닝의 3대 핵심 요소로서 아래 세 가지를 꼽을 수 있다.

  • 라이브러리 캐시 최적화
  • 데이터베이스 Call 최소화
  • I/O 효율화 및 버퍼 캐시 최적화

물론, 고성능 데이터베이스를 구축하는데 있어 더 근원적인 요소는 데이터 모델 및 DB 설계에 있다. 다만, 데이터 모델과 DB 설계 부분은 이 책의 범위를 벗어나므로 논의에서 제외한 것뿐이다. 위 세 가지 튜닝 요소는 주로 애플리케이션 튜닝 관점에서 바라본 것이다. 그리고 I/O 효율화 및 버퍼 캐시 최적화에는 인덱스와 조인 원리, 옵티마이저 원리를 기반으로 한 SQL 튜닝을 포함한다.

그림 3-17은 데이터 모델 및 DB 설계, 그리고 세 가지 튜닝 영역이 데이터베이스 성능에 미치는 영향도를 보여준다31).

1
31) 정량적인 측정 결과는 아니며, 필자의 경험과 생각을 그래프로 그려본 것이다.

  • 데이터 모델 및 DB 설계 : 데이터 모델과 DB 설계의 개념은 보는 시각에 따라 다를 수 있는데, 여기서는 업무적 특성을 반영한 정규화된 데이터 모델을 바탕으로, DBMS의 물리적 특성과 성능을 고려한 설계 변경, 그리고 DBMS 요소에 대한 설계를 실시하는 것을 말한다32).
    • 논리 데이터 모델 : DBMS의 물리적 특성은 배제하고 데이터의 업무적 특성만을 반영한 논리 설계(엔티티, 속성, 릴레이션십 정의). 개념모델과 (상세)논리모델로 구분하기도 함.
    • 물리 데이터 모델 : DBMS의 물리적 특성과 성능을 고려한 설계 변경 (예를 들어, 엔티티 통합/분할, 인조식별자 정의, 이력관리, 반정규화, 집계 테이블 설계 등), 테이블 정의, 컬럼 정의, PK/FK 정의 등
    • DB 설계 : 파티션 설계, 클러스터 및 IOT 구성, 기초 인덱스 설계, 뷰 설계, 시퀀스 설계 등
  • 애플리케이션 튜닝 : Lock 경합, 파싱 부하, 데이터베이스 Call 발생량을 최소화하고, 인덱스 설계 조정 및 SQL 변경을 통해 I/O 효율을 높이는 등의 튜닝 요소를 말한다.
  • 데이터베이스 튜닝 : 초기화 파라미터 설정, SGA/PGA 메모리 구성, Redo 파일 구성, 테이블스페이스 및 데이터파일 구성 등에 관한 전략을 조정하는 것을 말한다.
  • 시스템 튜닝 : OS 레벨에서의 CPU와 메모리 구성, I/O 서브시스템 구성(파일시스템, 디스크 스트라이핑 등), 네트워크 설정 같은 하드웨어적인 튜닝을 말한다.
1
32) 개념설계(DBMS와 독립적인 설계), 논리설계(목표 DBMS에 맞는 스키마 설계), 물리설계(목표 DBMS에 맞는 물리적 구조 설계)로 나누기도 함.

그림 3-17에 표현한 것 처럼 데이터베이스 튜닝과 시스템 튜닝은 성능에 미치는 영향력이 상대적으로 낮다. 심각한 디스크 I/O와 RAC 관련 부하, 그리고 하드 파싱 때문에 고생하는 시스템에 더 빠른 디스크를 도입하고, 인터커넥트(InterConnect)를 더 빠른 장비로 교체하고, 버퍼 캐시와 Shared Pool 공간을 늘리는 등의 작업은 근본적인 처방이 되질 못한다.

데이터베이스 성능을 좌우하는 열쇠는, 고품질 데이터 모델과 효과적으로 구현된 애플리케이션에 있다. 잘못된 데이터 모델은 비효율적인 액세스 유형을 야기한다. 이 때문에 생기는 SQL 성능 문제를 해결하려고 과도한(또는 무규칙적인) 반정규화를 실시하게 되고, 이는 궁극적으로 데이터의 일관성과 품질 저하로 연결된다. 이는 다시 기존 데이터에 대한 신뢰성을 떨어뜨려 새로운 데이터 요건으로 표출되고, 중복 데이터를 계속 양산하는 결과를 낳는다. 이런 악순환의 고리 때문에 데이터 모델 및 DB 설계가 고성능 데이터베이스 구축을 위한 핵심적인 요소로 파악되어야 한다.

그리고 애플리케이션에서 근본적으로 발생하는 일량을 최소화해야만 한다. 비유컨대, 어떤 학생은 교과서 1권만 읽고 100점을 맞는 반면, 어떤 학생은 교과서 외에 참고서까지 총 10권을 읽고서야 100점을 맞는다. 산만하게 공부하기 때문인데, 비효율적으로 공부하는 학생에게 효율적으로 집중력 있게 공부할 수 있는 요령을 가르쳐야지 의자·책상을 새것으로 바꿔주고 책 10권을 빨리 읽을 수 있도록 속독법을 가르치는 등의 방법이 과연 효과적일까 고민해봐야 한다. 물론 효과가 없지는 않다. 하지만 장기적인 관점에서의 근본적인 처방이 필요하다. 데이터베이스 성능 튜닝 역시 마찬가지다. 이를 위해서는 다음 장부터 설명하는 원리들을 충분히 이해하고 활용할 수 있어야만 한다.

그림 3-18은 1장에서 보았던 그림에, 앞서 제시한 3가지 주요 튜닝 포인트를 각 요소별로 표시한 것이다. 4장부터 이 세 가지 주제를 놓고 본격적으로 튜닝 원리를 설명한다.

4장에서는 라이브러리 캐시 최적화 원리를 다루고, 5장에서는 데이터베이스 Call 최소화 원리를 다룬다. 마지막으로, I/O 효율화 및 버퍼 캐시 최적화 원리는 6장에서 다룬다. 그리고 I/O 발생량을 최소화함으로써 버퍼 캐시 부하를 최소화하기 위한 세부 원리로서 인덱스와 조인 원리, 옵티마이저 원리 그리고 기타 고급 SQL 활용 방안에 대해서는 2권에서 더 상세히 다룬다.

This post is licensed under CC BY 4.0 by the author.