4.12 Interleaving : 선 변환 과정이 끝나면 후 변환 과정을 연이어 수행하라
- CBQT 최적화를 위해 Transformation간의 관계는 필수적이다. ( Interleaving, Juxtaposition 을 사용 )
- Interleaving 기법
- Transformation (T2) 수행을 위해 T1이 먼저 수행되어야 하는 경우, T1 수행되면 이후 T2가 실행됨.
ex) CSU (Complex Subquery Unnesting) 실행되면 연이어 CVM (Complex View Merging)과 JPPD (Join Predicate Push Down) 이 실행됨. - CSU 수행 시 비용계산 오류를 줄이는 용도로 사용.
CSU (1,0) 이 최저 Cost로 선택 -> JPPD 입장에서 전혀 다른 결과를 가져올 수 있다. -> CSU (1,0)이 아닌 CSU (0,1) 상태에서 JPPD 적용이 최저 Cost가 될 수 있다. - Interleaving은 CBQT간 최저 Cost를 구하기 위해 대화하는 기능.
이로써 CSU + CVM + JPPD 를 고려한 최적의 Cost를 구할 수 있다.
SELECT /*+ QB_NAME(MAIN_VIEW) */
e1.employee_id, e1.manager_id, e1.salary
FROM employee e1
WHERE e1.department_id = 10
AND (e1.manager_id, e1.salary) IN (SELECT /*+ QB_NAME(SUBQ) */
e2.manager_id, MAX(e2.salary)
FROM employee e2
GROUP BY e2.manager_id )
AND ROWNUM = 1 ;
- 서브쿼리에 Group By -> CSU 발생할 것.
- Interleaving 발생하여 CVM, JPPD 의 Cost가 같이 고려될 것이다.
- ROWNUM이 존재함 -> CVM 발생할 수 없다. JPPD만 고려될 것이다.
- 실제 10053 trace 내용
- CSU 발생 이후 interleaving 기능에 의해 CVM 고려되나 rownum 제약으로 CVM 발생안함.
- Costing 계속 진행되어 5.0035 됨
- CVM 과정 종료되면, JPPD의 Costing 과정이 진행된다. ( Interleaving이 CVM뿐 아니라 JPPD도 동시에 고려함)
- JPPD를 적용한 Iteration (JPPD: starting iteration 2, state space =(2) : (1)부분)
Cost 가 4.0010 으로 최적임을 알 수 있다. - SU: Finished interleaved join pred push down) 마지막으로 CSU를 수행하지 않는 Iteration 의 Cost 를 구하고 CSU 과정을 마치게 된다.
- 4.0010 은 JPPD 의 Cost와 CSU의 Cost 가 된다.
SU: Updated best state, Cost = 4.00
- CSU의 Cost는 CSU + CVM + JPPD 모두를 고려한 최적의 Cost를 갖는 Iteration 을 선택한다.
- Interleaving 기능으로 더 정확한 Cost를 구할 수 있다.