2019년 1월 7일
옵티마이저 (Optimizer)
1. Driving Range 최소화, 옵티마이저
(1) 옵티마이저의 개념
![]() |
- 사용자가 요청한 SQL 질의를 최소의 비용을 추정하여 실행 계획을 수립하는 DBMS 핵심 엔진
(2) 옵티마이저의 종류
| 종류 | 개념 |
|---|---|
| 규칙 기반 옵티마이저 (RBO) | – 정해놓은 규칙에 따라 액세스 경로를 평가하고 실행 계획을 선택 |
| 비용 기반 옵티마이저 (CBO) | – 비용을 기반으로 실행 계획 최적화 수행 – 비용: 쿼리 수행 시 소요일, 시간 |
- RBO의 무조건적 규칙에 따른 비현실적 실행 계획의 단점을 극복하기 위해 CBO개발
2. 규칙/비용 기반 옵티마이저 비교
| 항목 | 규칙 기반 (RBO) | 비용 기반 (CBO) |
|---|---|---|
| 개념 | 사전에 정의된 Rule기반 | 최소비용 계산 실행 계획 수립 |
| 기준 | 실행 우선 순위(Ranking) | 액세스 비용 (Cost) |
| 인덱스 | 인덱스 존재 시 항상 사용 | Cost에 의한 결정 |
| 성능 | 사용자 SQL작성 숙련도 | 옵티마이저 예측 성능 |
| 장점 | 판단이 매우 규칙적 실행 예상 가능 | 통계 정보를 통한 현실 요소 적용 |
| 단점 | 예측 통계 정보 요소 무시 | 최소 성능 보장 계획의 예측 제어 어려움 |
| 사례 | AND 중심 양쪽 ‘=’ 시 Index Merge 사용 | AND 중심 양쪽 ‘=’ 시 분포도별 Index 선택 |
- 대부분의 상용 DBMS는 CBO 기반이며, Oracle도 10g버전부터 RBO 지원 중단
3. 옵티마이저의 실행 계획 최적화 절차
(1) 옵티마이저의 실행 계획 최적화 절차도
![]() |
(2) 옵티마이저의 실행 계획 최적화 절차
| 최적화 절차 | 설명 |
|---|---|
| Query 변환 | – 사용자가 작성한 SQL문을 처리하기 용이한 형태로 변환 |
| 비용 예측 | – 다양한 대안 계획의 비용을 예측 – 정확한 예측 위해 정확한 통계 정보 필요 |
| 계획 생성 | – 동일 결과의 다양한 대안 생성 – 정확한 예측을 위해 최적화 시간 소요 |
- CBO는 통계 정보에 따라 실행 계획을 수립하므로 통계 정보 관리가 중요
4. 최적 옵티마이저 활용 위한 통계 정보 관리에 대한 제언
(1) 최적 옵티마이저 활용 위한 다양한 통계 정보 관리
| 통계 정보 | 설명 |
|---|---|
| 테이블 통계 | compute 전수 검사, estimate 표본 조사 |
| 인덱스 통계 | 인덱스를 활용한 통계 정보 |
| 컬럼 통계 | 테이블, 인덱스 제외 컬럼 통계만 수집 |
| 시스템 통계 | I/O, CPU 성능 등 H/W 특성 측정 |
(2) 최적 옵티마이저 활용 위한 통계정보 수집 시 고려사항
| 고려사항 | 설명 |
|---|---|
| 시간 | 시스템 부하가 적은 시간대 산정 필요 |
| 샘플 크기 | DB와 세그먼트 크기에 비례 일정 부분만 추출 |
| 정확성 | 오브젝트 데이터와 통계 정보 데이터 근접 필요 |
| 안정성 | 통계 정보 수집으로 인한 성능 저하 최소화 |
- 통계 정보 수집은 CPU, 시스템 I/O 자원을 많이 사용하는 작업이므로 서비스 영향도 고려 최한시 수행 필요

