1. 옵티마이저 (Optimizer).

- 사용자가 질의한 SQL문에 대해 최적의 실행 방법을 결정하는 DBMS의 소프트웨어

- SQL실행계획(Execution Plan)을 수립하고 SQL을 실행

- 실행계획은 SQL성능에 아주 중요한 역할

- 옵티마이저가 비효율적으로 실행계획을 수립하면 SQL 개발자는 SQL을 개선해야 함

=> 옵티마이저에게 실행 계획을 변경하도록 요청하는 방법 : 힌트(HINT) 사용

* 옵티마이저 ORDERD 힌트 : /*+ ordered use_nl*/ /*+ordered use_merge*/ /*+ordered use_hash*/


1) 옵티마이저 실행 

(1) 실행 계획 확인

- 옵티마이저는 SQL 실행계획을 PLAN_TABLE 에 저장 -> 조회해서 실행계획 확인 가능

- TABLE ACCESS FULL -> 테이블을 모두 읽었다는 뜻!


(2) 실행 방법

- 개발자가 sql 실행 -> 파싱(Parsing) -> 옵티마이저가 실행계획 수립 -> SQL 실행 -> 데이터 인출(Fetch)

SQL 문법 검사 및                         PLAN_TABLE

구문분석 수행(data dictionary) 오브젝트 통계, 시스템 통계


- 기본적으로 비용 기반 옵티마이저를 사용하여 실행계획 수립(하위 버전 호환용으로 남아있는 규칙기반 옵티마이저...)

* 옵티마이저 엔진

 Query Transformer

 - SQL문 효율적으로 실행하기 위해 옵티마이저가 변환함

 - SQL이 변환되어도 결과는 동일 

 Estimator

 - 통계 정보를 사용하여 SQL 실행비용 계산

 - 총비용은 최적 실행계획 수립하기 위해 계산

 Plan Generator 

 - SQL을 실행할 실행 계획 수립


2) 옵티마이저 종류

(1) 규칙기반 옵티마이저

- 실행 계획 수립할 때 15개의 우선순위를 기준으로 실행계획 수립

- 인덱스를 이용한 엑세스 방식이 전체 테이블 엑세스 방식보다 우선순위가 높음

 1.

 ROWID 사용한 단일 행

 9.

 단일 칼럼 인덱스인 경우

 2.

 클러스터 조인에 의한 단일 행

 10.

 인덱스가 구성된 칼럼에서 제한된 범위를 검색하는 경우

 3.

 유일하거나 기본키를 가진 해시클러스터 키에 의한 단일 행

 11.

 인덱스가 구성된 칼럼에서 무제한 범위를 검색하는 경우

 4.

 유일하거나 기본키에 의한 단일 행

 12.

 정렬-병합 조인인 경우

 5.

 클러스터 조인인 경우

 13.

 인덱스가 구성된 칼럼에서 MAX 혹은 MIN을 구하는 경우

 6.

 해시 클러스터 조인인 경우

 14.

 인덱스가 구성된 칼럼에서 ORDER BY 를 실행하는 경우

 7.

 인덱스 클러스터 키인 경우

 15.

 전체 테이블 스캔(FULL TABLE SCAN)하는 경우

 8.

 복합 칼럼 인덱스인 경우

 

 



(2) 비용기반 옵티마이저

-  SQL 처리하는데 필요한 비용이 가장 적은 실행 계획 선택

- 오브젝트 통계 및 시스템 통계를 사용하여 비용을 계산, 예측함

- 통계정보가 없으면 정확한 비용 예측이 불가능해져 비효율적인 실행계획 생성할 수 있음

+ Recent posts