Optimizing Oracle Optimizer (2009년)
Transformation이란 무엇인가? 0 0 52,461

by 구루비스터디 Transformation [2018.07.14]


Transformation


Transformation이란 무엇인가?
  • Oracle은 Query에 대해 Optimizaion을 수행하기 전(즉, 실행 계획을 생성하기 전)에 Transformation 과정을 수행한다.
  • Transformation이란 말 그대로 Query를 변형하는 과정을 의미한다.
  • "A"라는 Query를 요청해도 Oracle은 내부적으로 "B"라는 Query를 수행할 수 있다는 의미이다.


Transformation을 수행하는 이유
  • 우리는 SQL이라는 문법을 사용해 SQL문장을 작성하지만, Oracle은 그 문장이 어떻게 해야 최적의 비용으로 실행되는지에 대한
  • Rule을 가지고 있다. 따라서 Oracle은 우리가 작성한 문장이 어떻게 변형되어야 더 최적화(Optimization) 작업을 수행하기 쉬운지 잘 알고 있다.
  • Transformation 과정이 Logical Optimization으로 불리는 이유도 이 때문이다.
  • 실제 Optimization(Physical Optimization) 과정이 더 잘 수행될 수 있도록 도와 주는 역할을 한다.


왜 Transformation이 중요한가?
  • 실행 계획을 해석하는데 있어서 필수적이기 때문이다. Transformation이 수행된 Query와 그렇지 않은 Query는 전혀 다른 실행 계획을 보인다.
  • 실행 계획을 보고 Transformation이 수행되었는지, 수행되었다면 어떤 기법이 사용되었는지,
  • 그리고 실행 계획의 변화에 어떤 작용을 했는지를 이해할 수 있어야 한다.


  • Transformation의 기본적인 목표는 (CBO 관점에서) 복잡한 Qeury를 단순한 Query로 바꾸는 것이다.
  • Oracle CBO의 Optimization 단위는 Query가 아니라 Query Block 이다.



select *
  from (select * from t1 where t1.c1 = 1) v1, t2
 where vi.c1 = t2.c1 and
       t2.c1 in (select c3 from t3)
;


  • 위의 Query는 모두 세 개의 Query Block으로 이루어져 있다.
  • Main Query, Inline View, Subquery
  • Oracle은 Inline View와 Subquery데 대해서 각각 Optimization을 수행한 후, 그 결과를 이용해서 다시 Main Query를 최적화한다.


  • 만약 Transformation에 의해서 Inline View와 Subquery를 Main Query로 합칠 수 있다면?

select *
  from t1, t2, t3
 where t2.c1 = (semi) t3.c1 and
       t1.c1 = t2.c1 and
       t1.c1 = 1 and
       t2.c1 = 1
;


  • 단 하나의 Query Block만이 남는다. Oracle은 하나의 Query Block에 대해서만 Optimization을 수행하면 된다.
"데이터베이스 스터디모임" 에서 2009년에 "OPTIMIZING ORACLE OPTIMIZER " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3869

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입