728x90
반응형

실행계획 - 데이터를 처리하고자할때, 수립되는 데이터 처리 방법 

 

실행계획을 하는 이유

 

- 비효율적인 부분 확인 가능 

- 실행계획을 통해 SQL 튜닝 포인트 도출 

 

EXPLAIN PLAN - 실행계획만 확인 가능한 방법 

 

SET AUTOTRACE

 

- 실행계획과 I/O관련 정보 확인 가능 

- 한 번의 명령으로 여러 개의 SQL에 대한 실행계획 볼 수 있음 

 

옵티마이저

 

하나의 프로세스로 사용자가 실행한 SQL을 해석하고 데이터 추출을 위한 실행 계획을 수립하는 프로세스 

 

오라클 

 

RBO(초창기버전부터 제공) 

 

CBO(Vlog부터 기본적인 설정으로 적용)

 

RBO(Rule Based Optimizer)

 

- 기본적으로 15개의 순위가 매겨진 규칙이 있음 

  -> 이를 기초로 해서 실행계획을 수립함. 

 

- SQL에 대한 실행계획이 하나 이상일 경우엔 

  순위가 높은 규칙을 이용

 

- 수립될 실행계획이 예측 가능하기에 

  개발자가 원하는 처리 경로로 유도 하기 쉬움 

 

CBO(Cost Based Optimizer)

 

- 대상 row들을 처리하는데 자원 사용 최소화함 

  궁극적으로 데이터를 빨리 처리하는게 목적 

 

- CBO에 영향을 미치는 비용 산정 요소 

  각종 통계정보,Hint,연산자,Index

 

- Cluster,DBMS버전,CPU/Memoy 용량 

Disk I/O등과 같이 매우 다양함 

 

통계정보 -> 주기적으로 생성

 

CBO의 성능을 최적의 상태로 유지시키기위해 테이블,

인덱스,클러스터 등을 대상으로 통계 정보 생성 

 

-> 정기적으로 ANALYZE 작업을 하는 것이 가장 중요 

 

-> 가장 효율적인 실행계획을 수립하기 위해 

    최소 비용을 계산할때 중요하게 사용

 

RBO

Rank  Access Path
1 Rowid에 의한 1row
2 클러스터 조인에 의한 1row
3 unique나 Primarykey를 사용한 해시클러스터 키에 의한 1row
4 Unique나 Primary key에 의한 1row 
5 클러스터 조인
6 해시 클러스터키
7 클러스터키
8 결합 칼럼 인덱스
9 단일 칼럼 인덱스
10 인덱스에 의한 유한영역
11 인덱스에 의한 무한영역
12 소트머지 조인
13 인덱스로 구성된 칼럼 최대 or 최소
14 인덱스로 구성된 칼럼 ORDER BY
15 인덱스 없이 전체 테이블 스킨 
(FTS:Full Table seam)

옵티마이저의 레벨별 설정 

 

Instance Level : initSID.ora를 이용해서 지정 

OPTIMMZER_MODE = 

[RULE/CHOOSE/FIRST_ROWS/ALL-ROWS(기본값)

 

Sesssion Level 

SQL > ALTER SESSION SET OPTIMIZER_MODE = 

[RULE/CHOOSE/FIRST_ROWS/ALL_ROWS]

 

State ment Level

SQL>SELECT/*First_rows*/

       ename 

FROM emp; 

 

RBO와 CBO의 비교 

 

SELECT e.ename,d.dname 

 FROM emp e,dept d 

WHERE e.deptno = d.depto 

 AND e.deptno = 10; 

CBO 

 

 

반응형

+ Recent posts