CBQT는 COST가 더 저렴할때만 Transformation을 수행하는 방식을 사용한다.
10053 Event를 이용하면 CBQT에 의해 어떤일이 일어나는지 알 수 있다.
동작원리
Transformation 단계에서는 Transformation을 위해 COST 계산을 수행할 지 여부만 결정
Optimization단계에서 Transformation이 이루어진 경우와 이루어 지지 않은 경우의 Cost를 모두 계산해서 비교한다.
Transformation에 의해 Cost가 개선될때만 실제 Transformation을 수행한다.
CBQT의 문제점
Optimization(Hard Parse)의 Overhead가 증가한다. 이것이 Oracle의 Bug와 맞물리면 과도한 parse time의 증가를 가져온다.
Cost 자체의 한계점을 그대로 지니고 있다. cost가 낮아도 성능이 좋지 않은 경우가 있으며, 이는 Oracle의 Cost Model자체가 현실을 100% 반영하고 있지 못하기 때문에 발생하는 당연한 현상이다. CBQT에서도 동일한 문제가 있다. Cost가 높다고 해서 실제 성능이 나쁘다는것을 장담 할 수 없다.
CBQT 제어하기
_OPTIMIZER_COST_BASED_TRANFORMATION
CBQT의 동작여부를 지정한다.(Default : 활성)
Cost Based Subquery Unnesting, Cost Based Complex View Mersing, Cost Based Join Predicate Pushing등을 모두 제어할 수 있다.
_OPTIMIZER_PUSH_PRED_COST_BASED
Cost Based Join Predicate Pushing의 동작여부를 지정한다. (Default:True)
_OPTIMIZER_CONNECT_BY_COST_BASED
Cost Based Connect By Transformastion의 동작여부 지정 (Default : True)