실행계획 - 데이터를 처리하고자할때, 수립되는 데이터 처리 방법
실행계획을 하는 이유
- 비효율적인 부분 확인 가능
- 실행계획을 통해 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
'IT > DB' 카테고리의 다른 글
[SQL] 인덱스 활용이 불가능한 경우 (0) | 2021.11.23 |
---|---|
[SQL] 옵티마이저의 개념 및 종류와 인덱스 (0) | 2021.11.09 |
tnsnames.ora 접속하는 방법 (0) | 2021.10.26 |
오라클 클라이언트 및 패키지 설치 방법 (2021.10.26 기준) (0) | 2021.10.26 |
SQL 개념 정리 (0) | 2021.10.20 |