Optimizing Oracle Optimizer (2009년)
CBO의 기본 흐름 0 0 57,361

by 구루비스터디 CBO Optimizer [2018.07.14]


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년에 "OPTIMIZING ORACLE OPTIMIZER " 도서를 스터디하면서 정리한 내용 입니다.

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

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

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

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