3.1.3. 옵티마이져의 최적화 절차

  • 옵티마이져의 목표
사용자가 요구한 결과를 가장 최소의 자원으로 처리할 수 있는 방법을 찾아내는 것
  • 옵티마이저 처리 과정
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. 탐색 도중 최적이라고 발생하면 실행계획을 더 이상 진행하지 않고 멈춤