Optimizer 의 2가지 종류
  * Rule_Based Optimization (RBO)
  * 미리 정해진 규칙에 따라 실행 계획을 수립
  * Cost_Based Optimization (CBO)
  * 실행 비용(cost)의 예측을 통한 지능적인 실행 계획의 수립
    - 실행계획을 구성하는 가장 중요한 요소
       1순위 : 접근경로(인덱스)


 

※ 참고
9i : RBO, CBO
10g 이상 : CBO


 
 


Parser : 서버프로세스가 파싱하는 도구
옵티마이저가 실행계획을 만들기 전에 사전 작업이 필요하다.
ex) 음식 만들때 재료 준비
 
내가 : where sal between 100 and 200;

옵티마이저 : where sal >= 100 and sal <= 200;
▶ 내가 쿼리 짤때 옵티마이저가 따로 변환할 필요 없이 짜주면 성능향상


 



1. Rule_Based Optimization (RBO)
  * 미리 정해진 규칙에 의한 실행 계획 결정
  * 연산자 우선 순위
  * 접근 경로의 우선 순위
  * SQL 문장의 syntax 규칙
            ☞ 상식에 의거하지만 융통성은 없음
  * 데이터에 대한 통계 내지 실제 SQL을 수행할 경우에 소요될 비용에 대한 고려를 하지 않음
  * 예) 인덱스가 있다면 무조건 사용
  - 테이블의 크기, 인덱스의 효율 등 무시
  * Oracle 버전 6 이하와의 역 호환성을 위해 지원
▶ 통계정보 안봄!!!



2. Cost_Based Optimization (CBO)
  * 데이터에 대한 각종 통계를 사용
    : 통계정보 사용 : 딕셔너리가 정확해야 한다.
      - 스택틱딕셔너리(DBA_, USER_, ALL_)실시간 반영안되어서(=실시간반영안되서) 틀린 정보 있을수있다.
  * 실제 SQL을 수행할 때 소요될 비용을 예측하고 그 값을 기준으로 실행 계획 결정
  * I/O 횟수
  * CPU 사용량
  * 메모리 사용량
  * 네트워크 전송량
           ☞ 보다 현실적이고 지능적인 판단을 내림   
  * Oracle7 에 처음 도입
  * 지속적으로 향상
  * 일반적으로 RBO 보다 우수
  - 이론적으로 RBO 보다 성능이 좋지만 전제조건으로 딕셔너리가 정확해야 함.
          → 통계정보 (딕셔너리) 를 보고 판단
          → 10g 부터는 통계정보를 자동 update함.
 
CBO 에서만 사용 가능한 기능들
  * 테이블 및 인덱스의 Partitioning
  * 인덱스 구성 테이블 (Index-organized table)
  * Reverse Key 인덱스
  * Function-based 인덱스
  * SELECT 문장에서의 SAMPLE 절
  * 병렬 Query 및 병렬 DML
  * Star Join 및 Star 변형
  * Optimizer 확장
  * Materialized View를 이용한 Query rewrite
  * Enterprise Mananger progress meter
  * 해쉬 Join
  * bitmap 인덱스 및 bitmap Join 인덱스
  * 인덱스 skip scan 알고리즘
 
 
 
 

※ 비유
RBO = 수동카메라
CBO = 자동카메라
- 9i까지 통계정보를 수동으로 업뎃해야 한다.
- 10g부터 통계정보를 자동으로 업뎃한다. → CBO만 있음.


 
 
 


Posted by 딩구르
,