이번에는 오라클 옵티마이저를 이루는 3가지 중요한 구성요소에 대해 알아보자.
Query Parser 가 SQL 을 검사하여 Query Transformer에서 넘겨주면 Transformer 가 SQL 을
변신시켜서 Estimator 에 넘겨준다. 이때 Estimator는 통계정보등을 참조하여 가장 낮은 cost 를 갖는 SQL 을 찾아내어
plan Generator 에 넘겨주고 실행계획을 완성하게 된다
( SQL 실행 -> Parser(SQL을 Query Block 단위로 분리) -> Query Transformer
-> Cost Estimator -> Plan Generator -> Row Source Generator -> SQL의
결과 Fetch)
1. Query Transformation
SQL문장에서 각각의 쿼리 부분을 쿼리 블럭(Query Block)이라고 한다. Query Transformer의 Input의 파싱된
SQL문장인데 쿼리 블럭의 set이다. 예를들면 아래와 같은 쿼리에서 SQL문장은 두개의 쿼리 블럭으로 나뉘어 진다.
inner query block인 select deptno from emp whete ename = 'SMITH'
out query blick인
select empno, ename,
from emp e
where deptno = (inner query block 결과치)
[예]
select empno, ename,
from emp e
where deptno = (select deptno from emp whete ename = 'SMITH')
from emp e
where deptno = (inner query block 결과치)
[예]
select empno, ename,
from emp e
where deptno = (select deptno from emp whete ename = 'SMITH')
쿼리 트랜스포머는 아래의 요소기술을이용하여 쿼리를 변형한다.
View Merging
Predicate Pushing
Subquery Unnesting
Query Rewrite with Materialized Views
Predicate Pushing
Subquery Unnesting
Query Rewrite with Materialized Views
SSU(Simple Subquery Unnesting : Distinct나 Group By가 없는 서브쿼리를 조인으로 바꾸는 작업
CSU(Complex Subquery Unnesting : Distinct나 Group By가 있는 서브쿼리를 조인으로 바꾸는
작업
CVM(Complex View Merging : Distinct나 Group By가 있는 뷰이 해체작업
JPPD(Join Predicate Push Down : 뷰 내부에 조건절을 밀어 놓는 작업
SVM(Simple View Merging : 인라인뷰의 해체작업)
JE(Join Elimination : From 절의 테이블 제거 작업)
2. Cost Estimation
주어진 실행계획의 모든 Cost를 측정한다. 3가지의다른 측정방법을 이용하며 최소의 비용을 갖는 SQL문장을 Plan
Generator에게 넘긴다.
Selectivity(선택도) : 행의 일부를 나타내며 쿼리의 조건절인 name = 'SMITH'등에 의존적이다. 행의 일부를
필터링
Cardinality : 레코드의 개수
Cost : 비용, 리소스의 단위, 최적화 작업 단위로 디스크 I / O, CPU 사용량, 메모리 사용량을 사용한다.
3. Plan Generator(실행계획 생성)
댓글 없음:
댓글 쓰기