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만 있음.
'Oracle > Oracle - 튜닝' 카테고리의 다른 글
튜닝 - 파티션테이블 (3) | 2012.03.15 |
---|---|
튜닝 - 결합인덱스 (0) | 2012.03.15 |
튜닝 - SQL 실행 계획 확인하기 : SQL Trace 및 TKPROF (1) | 2012.03.13 |
튜닝 - SQL 실행 계획 확인하기 : SQL*Plus Auto Trace 활용 (2) | 2012.03.13 |