2017년 3월 24일 금요일

[닷넷/C#/자바/오라클/국비지원IT교육/구로IT학원/재직자환급교육추천_탑크리에듀]1.15 비용기반 옵티마이저(Cost-Based Optimizer)

비용기반 옵티마이저(CBO)는 실제로 가장 빠르게 실행되는 방법의 Cost를 계산하여 실행 경로를 선택하는 방법으로 DB의 버전이 높아질수록 더욱 정교하게 발전되고 있는 방법이며 오라클에서 권장하고 있다. 하지만 옵티마이저가 가장 최선의 실행 경로를 찾기 위해서는 테이블의 크기, 레코드 수, 컬럼 값의 분포도와 같은 테이블의 통계정보(부가적인 정보)를 제공해 주어야 정상적으로 잘 동작한다고 할 수 있다. 테이블이나 인덱스에 통계 정보가 있는지에 대한 여부는 USER_TABLES, DBA_TABLES, USER_INDEXES, DBA_INDEXES와 같은 뷰의 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로 동작한다.

댓글 없음:

댓글 쓰기