<CBO기본 흐름>
- 사용자가 SQL문장을 접수하면 Oracle은 기본적인 Parsing 작업을 수행한다. Syntax를 체크하고 Object 이름과 권한등을 확인한다.
- Transformation 과정을 수행한다. Subquery, Inline View와 같은 복잡한 부분들을 해소하고 Predicate를 변환한다. Start Transformation과 같은 복잡한 Trnasforation도 이 단계에서 이루어진다.
이 과정을 흔희 Logical Optimization이라고 부른다. - Trnasformation이 이루어진 Query를 대상으로 Optimization작업을 수행한다. System Statistics와 Object Statistics를 이용해 Optimization에 필요한 기본정보를 얻고 Access Type과
Join Type을 고려한 비용 계산이 이루어진다. Query의 조건을 만족하는 가장 최소의 비용을 갖는 실행 계획을 도출한다. 이 과정을 흔희 Physical Optimization이라고 부른다. - 도출된 실행 계획을 이용해 Query를 실행하고 그 결과를 사용자에게 Return 한다.
- CBO의 기본 메커니즘이 Transformation(Logical Optimization)과 Optimization(Physicla Optimization)으로 이루어져 있다는 사실을 명백히 이해할 필요가 있다.
- Transformation단계는 최적의 실행 계획을 좀 더 쉽게 찾을 수 있도록 도와 준다는 의미에서 Logical Optimization으로 부르기도 한다.
CBO가 Version Up되면서 가장 크게 개선되는 부분이 Transaformation 단계 이다. - Optimization단계에서는 통계의 정보에 기반해서 Query의 수행 예측 비용을 계산한다.
- Statistics(Workload/Noworkload), Object Statistics, Dictionary Statistics, Fixed Object Statistics가 모두 CBO에 의해 사용된다.
- Object Statistics가 없는 객체에 대해서는 Dynamic Sampling이 수행되며, OPTIMIZER_DYNAMIC_SAMPLING_PARAMETER에 의해 결정되면 10g Default는 2이다.
<CBO기본 흐름>
- 사용자가 Inline View가 포함된 간단한 SQL문장을 수행 요청한다.
- Optimizer는 SQL 문장의 구문을 분석해서 Parse Tree를 생성한다. Inline View를 포함하고 있으므로 다층적인 Tree구조를 가지게 될 것이다.
- Transformation 단계에서 Inline View를 Main Query 안으로 Merging한다. 이를 View Merging이라고 부른다. View Merging이 이루어지면 Inline View는 없어지고
Query가 훨씬 간단한 형태, 즉 Optimization을 하기 좋은 형태로 변형된다. - Optimization단계에서 Table, Column, Histogram, System Statistics등을 고려하여 최적의 Cost를 갖는 실행 계획을 도출한다. 도출 결과 Index Range Scan이 선택되었다.
- CBO가 Query를 최적화 하는 과정은 10053 Event를 이용하면 가능하다
10g R2이전 버전에서는 Optimization 단계만이 기록되나, 10g R2 이후버전은 Transformation 단계가 포함된다.
문서에 대하여
- 최초작성일 : 2009년 2월 14일
- 이 문서는 오라클클럽 코어 오라클 데이터베이스 스터디 모임에서 작성하였습니다.
- {*}이 문서의 내용은 조동욱님의 'Optimizing Oracle Optimizer'을 참고하였습니다.*