[Hint]비용기반 옵티마이저(Cost-Based Optmizer)
비용기반 옵티마이저(Cost-Based Optimizer)
비용기반 옵티마이저(CBO)는 실제로 가장 빠르게 실행되는 방법의 Cost를 계산하여 실행 경로를 선택하는 방법인데 DB 의 버전이 높아질수록 더욱 정교하게 발전되고 있는 방법이며 오라클에서 권장 하고 있습니다.
하지만 옵티마이저가 가장 최선의 실행 경로를 찾기 위해서는 ANALYZE 명령으로 테이블의 크기, 레코드수,컬럼값의 분포도와 같은 부가적인 정보를 제공해 주어야 정상적으로 잘 동작한다고 할 수 있는데 테이블이나 인덱스에 통계 정보가 있는지에 대한 여부는 DBA_TABLES, DBA_INDEXED와 같은 뷰의 last_analyzed 컬럼의 값을 통해 알 수 있는데 NULL 값을 가지는 경우에는 통계 정보가 없다고 보시면 됩니다. 이 시각이 아주 오래전이라 현재 테이블이나 인덱스와 생성되어 있는 통계정보가 일치하지 않는다면 정확한 비용기반의 실행 계획을 만들기는 어려울 것입니다.
대부분의 SQL 튜닝의 경우 비용 기반 옵티마이저를 기본으로 하고 있으므로 비용기반 옵티마이저를 모르고는 튜닝이 어렵습니다.
[비용기반 옵티마이저로 동작하기 위한 방법]
통계정보가 생성되어 있으며 설정 파라미터가 아래와 같이 설정 되어 있는 경우에 비용기반 옵티마이저로 동작 합니다.
initSID.ora or spfileSID.ora 파일의 OPTIMIZER_MODE=ALL_ROWS
initSID.ora or spfileSID.ora 파일의 OPTIMIZER_MODE=FIRST_ROWS
initSID.ora or spfileSID.ora 파일의 OPTIMIZER_MODE=CHOOSE
CHOOSE로 설정 되어 있는 경우에는 통계정보가 없다면 규칙기반 옵티마이저, 있다면 ALL_ROWS로 동작 합니다.
'프로그래밍 > oracle' 카테고리의 다른 글
oracle - [Hint]옵티마이저(Optimizer) 개요 (0) | 2012.08.17 |
---|---|
oracle - [Hint]오라클 힌트란? (0) | 2012.08.17 |
oracle - [Hint]병렬처리(PARALLEL_INDEX) (0) | 2012.08.17 |
oracle - [Hint]병렬처리(PARALLEL) (0) | 2012.08.17 |
oracle - [Hint]병렬처리(NOPARALLEL) (0) | 2012.08.17 |