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 ;

  • 10053 내용을 미리 예상해보자.
  1. 서브쿼리에 Group By -> CSU 발생할 것.
  2. Interleaving 발생하여 CVM, JPPD 의 Cost가 같이 고려될 것이다.
  3. 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를 구할 수 있다.