오라클 튜닝 - 옵티마이저
2010.05.12 08:29
원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어
Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
1. 비용 기반 옵티마이저 (Cost-Based)
비용 기반 옵티마이저는 실제로 가장 빠르게 실행되는 방법의 원가(Cost)를 계산하여 선택하는
방법이다. 즉 실제로 소요되는 모든 경비를 계산해서 보다 비용이 적게 드는 방법을 채택하는
것을 비용 기반 옵티마이저라고 한다.
기본적으로 오라클 9i(7.x 이후부터는) 데이터베이스는 비용 기반 옵티마이저를 제공하지만 다음과
같은 환경 설정과 기타 정보가 존재할 때에만 사용 가능하며, 만족하지 못한다면 공식 기반
옵티마이저가 적용될 수도 있다. (비용 기반 옵티마이저는 비용 산출을 위한 분석 정보가
존재해야만 정확한 비용을 계산할 수 있다. 분석 정보가 없다면 정확한 비용을 산출할 수 없기
때문에 공식 기반 옵티마이저와 동일한 개념이 될 수 있는 것이다.)
- 비용 기반 옵티마이저로 데이터베이스 환경을 설정하는 파라메터
(데이터베이스 전체 모드에 설정하는 법. <init<SID>.ora>화일)
OPTIMIZER_MODE = CHOOSE;
ALL_ROWS
FIRST_ROWS
FIRST_ROWS_1
FIRST_ROWS_10
FIRST_ROWS_100
FIRST_ROWS_1000
FIRST_ROWS_10000
CHOOSE, ALL_ROWS는 비용 기반 옵티마이저 환경을 의미하며, SQL문의 WHERE 조건을
만족하는 모든 행을 가장 빠르게 검색하는 실행 계획을 결정한다.
FIRST_ROWS와 FIRST_ROWS_!은 SQL문의 WHERE조건을 만족하는 첫 번째 행을 가장 빠르게
검색하는 실행 계획을 결정한다.
FRIST_ROWS_10은 조건을 만족하는 10개의 행을 가장 빠르게 검색하는 실행계획이며, 이후것들도
조건을 만족하는 n개의 행을 가장 빠르게 검색하는 실행계획을 결정한다.
- 세션 기반 비용 기반 옵티마이저 설정
ALTER SESSION SET OPTIMIZER_GOAL = CHOOSE;
- 통계 정보를 만들어 주는 명령어다. 이 명령어에 의해 DBA_TABLES 또는 DBA_INDEXES
자료사전에 통계 정보가 저장된다.
ANALYZE TABLE [테이블명] COMPUTE STATISTICS;
INDEX [인덱스명] ESTIMATE STATISTICS [N] PERCENT ROWS
CLUSTER [크러스터명] DELETE STATISTICS
COMPUTE STATISTICS 절은 테이블에 저장되어 있는 모든 행을 대상으로 통계 정보를 수집한다.
ESTIMATE STATISTICS n PERCENT 절은 테이블에 저장되어 있는 n-PERCENT의 데이터로
통계 정보를 수집한다.
DELETE STATISTICS 절은 수집되어 있는 통계 정보를 삭제한다.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
1. 비용 기반 옵티마이저 (Cost-Based)
비용 기반 옵티마이저는 실제로 가장 빠르게 실행되는 방법의 원가(Cost)를 계산하여 선택하는
방법이다. 즉 실제로 소요되는 모든 경비를 계산해서 보다 비용이 적게 드는 방법을 채택하는
것을 비용 기반 옵티마이저라고 한다.
기본적으로 오라클 9i(7.x 이후부터는) 데이터베이스는 비용 기반 옵티마이저를 제공하지만 다음과
같은 환경 설정과 기타 정보가 존재할 때에만 사용 가능하며, 만족하지 못한다면 공식 기반
옵티마이저가 적용될 수도 있다. (비용 기반 옵티마이저는 비용 산출을 위한 분석 정보가
존재해야만 정확한 비용을 계산할 수 있다. 분석 정보가 없다면 정확한 비용을 산출할 수 없기
때문에 공식 기반 옵티마이저와 동일한 개념이 될 수 있는 것이다.)
- 비용 기반 옵티마이저로 데이터베이스 환경을 설정하는 파라메터
(데이터베이스 전체 모드에 설정하는 법. <init<SID>.ora>화일)
OPTIMIZER_MODE = CHOOSE;
ALL_ROWS
FIRST_ROWS
FIRST_ROWS_1
FIRST_ROWS_10
FIRST_ROWS_100
FIRST_ROWS_1000
FIRST_ROWS_10000
CHOOSE, ALL_ROWS는 비용 기반 옵티마이저 환경을 의미하며, SQL문의 WHERE 조건을
만족하는 모든 행을 가장 빠르게 검색하는 실행 계획을 결정한다.
FIRST_ROWS와 FIRST_ROWS_!은 SQL문의 WHERE조건을 만족하는 첫 번째 행을 가장 빠르게
검색하는 실행 계획을 결정한다.
FRIST_ROWS_10은 조건을 만족하는 10개의 행을 가장 빠르게 검색하는 실행계획이며, 이후것들도
조건을 만족하는 n개의 행을 가장 빠르게 검색하는 실행계획을 결정한다.
- 세션 기반 비용 기반 옵티마이저 설정
ALTER SESSION SET OPTIMIZER_GOAL = CHOOSE;
- 통계 정보를 만들어 주는 명령어다. 이 명령어에 의해 DBA_TABLES 또는 DBA_INDEXES
자료사전에 통계 정보가 저장된다.
ANALYZE TABLE [테이블명] COMPUTE STATISTICS;
INDEX [인덱스명] ESTIMATE STATISTICS [N] PERCENT ROWS
CLUSTER [크러스터명] DELETE STATISTICS
COMPUTE STATISTICS 절은 테이블에 저장되어 있는 모든 행을 대상으로 통계 정보를 수집한다.
ESTIMATE STATISTICS n PERCENT 절은 테이블에 저장되어 있는 n-PERCENT의 데이터로
통계 정보를 수집한다.
DELETE STATISTICS 절은 수집되어 있는 통계 정보를 삭제한다.