새로쓴 대용량 데이터베이스솔루션 1 (2011년)
옵티마이져의 최적화 절차 0 0 99,999+

by 구루비스터디 옵티마이저 Optimizer [2013.09.11]


옵티마이져의 최적화 절차

  • 옵티마이져의 목표 : 사용자가 요구한 결과를 가장 최소의 자원으로 처리할 수 있는 방법을 찾아내는 것


옵티마이저 처리 과정
  • 1. 최초 실행한 SQL은 데이터 딕셔너리를 참조하여 파싱을 수행
    • 옵티마이저는 파싱된 결과를 이용해 논리적으로 적용 가능한 실행계획 형태를 골라내고, 힌트를 감안하여 일차적으로 잠정적인 실행계획들을 생성
  • 2. 통계정보를 기반으로 데이터의 분포도와 테이블의 저장 구조의 특성, 인덱스 구조, 파티션 형태, 비교연산자 등을 감안하여 각 실행계획의 비용을 계산
    • 비용의 계산에는 컴퓨터의 자원(I/O, CPU, Memory)도 함께 감안됨
  • 3. 비용이 산출된 실행계획들을 비교하여 가장 최소의 비용을 가진 실행계획을 선택


가) 질의 변환기

  • 양호한 실행계획을 얻을 수 있도록 적절한 형태로 SQL의 모양을 변환


질의 변환에 사용되는 기술들
  • 뷰병합
  • 조건절 진입
  • 서브쿼리 비내포화
  • 실체 뷰의 쿼리 재생성
  • OR 조건의 전개
  • 사용자 정의 바인드 변수의 엿보기


나) 비용 산정기

  • 옵티마이져는 비용산정을 위해 선택도(Selectivity), 카디널러티(Cardinality), 비용(Cost)을 측정


선택도(Selectivity)
  • 처리할 대상 집합에서 해당 조건을 만족하는 로우가 차지하는 비율
  • 히스토그램 정보 유무에 따라 선택도 계산 방식은 달라짐.
  • 히스토그램 정보가 없는 경우 : 통계정보만을 이용해서 선택도를 계산
  • 히스토그램 정보가 있는 경우 : 미리 계산된 분포값을 직접 활용


카디널러티(Cardinality)
  • 판정 대상이 가진 결과건수 혹은 다음 단계로 들어가는 중간결과건수를 의미
  • 위에서 계산한 선택도(selectivity)와 전체 로우 수(Num_rows)를 곱해서 계산


비용(Cost)
  • 각 연산들을 수행할 때 소요되는 시간비용을 상대적으로 계산한 예측치
  • 스키마 객체에 대한 통계정보에 추가적으로 CPU와 메모리 상황, Disk I/O 비용도 고려되어 계산


다) 실행 계획 생성기

  • 적용 가능한 실행 계획을 선별하고 비교 검토를 거쳐 가장 최소의 비용을 가진 것을 선택
  • 다양한 적용 가능한 실행계획 형태에 대해 비교평가를 하지만 그렇다고 해서 논리적으로 존재하는 모든 것에 대해 시도를 하지는 않는다.


실행 계획 생성기는 아래의 두가지 전략을 사용
  • 1. 쿼리 수행에 예상되는 총 수행시간에 비해 최적화에 소요되는 시간이 일정비율을 넘지 않도록 함
  • 2. 탐색 도중 최적이라고 발생하면 실행계획을 더 이상 진행하지 않고 멈춤
"구루비 데이터베이스 스터디모임" 에서 2011년에 "새로쓴 대용량 데이터베이스 솔루션1" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/2609

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입