2014년 1월 21일 화요일

SQL 실행계획 해석하기[재직자무료교육/프로그래머교육/구로디지털IT교육,오라클/자바/닷넷/C#/iOS/안드로이드/아이폰교육]

SQL 실행계획 해석하기[재직자무료교육/프로그래머교육/구로디지털IT교육,오라클/자바/닷넷/C#/iOS/안드로이드/아이폰교육]


실행계획 해석
:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 
실행계획은 해당 SQL을 수행하기 위한 절차이며 오라클 옵티마이저에 의해 만들어 집니다. 해석을 위해서는 Row Source Operartors Tree 또는 Row Source Level을 이용하여 해석하는데 아래 예를 보죠.
 
1.     Row Source Operators Tree Serial Execution에 대한 Tree를 보여주는 것인데 실행계획은 Row Source로 구성되며 각각의 Row Source들을 Tree 형태로 구성하여 해석을 하는 것을 말합니다.
 
SQL> select ename, dname
  2  from emp e, dept d
3  where e.deptno = d.deptno;
 
Execution Plan
:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
Access Operation 또는 Row Source
<v:f eqn="val #0"></v:f><v:f eqn="sum 21600 0 #0"></v:f><v:f eqn="sum #1 0 #0"></v:f><v:f eqn="sum #1 #0 0"></v:f><v:f eqn="prod #0 9598 32768"></v:f><v:f eqn="sum 21600 0 @4"></v:f><v:f eqn="sum 21600 0 #1"></v:f><v:f eqn="min #1 @6"></v:f><v:f eqn="prod @7 1 2"></v:f><v:f eqn="prod #0 2 1"></v:f><v:f eqn="sum 21600 0 @9"></v:f><v:f eqn="val #1"></v:f><v:h yrange="0,@8" position="center,#0"></v:h><v:h yrange="@9,@10" position="bottomRight,#1"></v:h>----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=14 Bytes=252)
   1    0   HASH JOIN (Cost=5 Card=14 Bytes=252)
   2    1     TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=4 Bytes=44)
<v:f eqn="val #0"></v:f><v:h position="#0,center"></v:h><o:lock v:ext="edit" shapetype="t"></o:lock>   3    1     TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=98)
<o:lock v:ext="edit" shapetype="t"></o:lock> 


                     Row Source Parent Key
 Row Source Key
 
0 : SELECT
위 실행계획을 도식화 하기 위해서는 Row Source Key Row Source Parent Key를 알고 있으면 되는데 Row Source Key 1번은 Parent 0번이며, 2/3번은 1번이다. 이를 도식화하면 다음과 같다. (해석은 밑에서 위로, 좌에서 우측으로 진행을 하면 된다)
 
 
1 : Hash Join
2: FULL(DEPT)
3: FULL(EMP)
 
 
 
 
 
 
 
 
 
 


2.     Row Source Level을 통한 해석
 
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=14 Bytes=252)
   1    0   HASH JOIN (Cost=5 Card=14 Bytes=252)
   2    1     TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=4 Bytes=44)
   3    1     TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=98)
 
          Level 1
              Level 2
                Level 3
 
가장 안쪽의 Level 3부터 해석을 하며 같은 레벨의 경우 위쪽부터 해석을 하면 된다.
 
DEPT 테이블을 FULL Scan한 후 DEP 테이블을 FULL Scan하여 HASH Join 후 원하는 데이터를 추출하는 실행 계획이다.
 
다음의 예를 보도록 하자.
 
SQL>  select ename, dname
  2  from emp e, dept d
  3* where trim(e.deptno) = trim(d.deptno);
 
ENAME      DNAME
---------- --------------
CLARK      ACCOUNTING
KING       ACCOUNTING
MILLER     ACCOUNTING
SMITH      RESEARCH
……
 
14 개의 행이 선택되었습니다.
 
 
 
Execution Plan
---------------------------------------------------------
   0      SELECT STATEMENT Optimizer=HINT: RULE
   1    0   MERGE JOIN
   2    1     SORT (JOIN)
   3    2       TABLE ACCESS (FULL) OF 'DEPT'
   4    1     SORT (JOIN)
   5    4       TABLE ACCESS (FULL) OF 'EMP'
 
위 실행계획에 대한 해석은
 
Level 4 : DEPT 테이블을 FULL SCAN + EMP 테이블을 FULL SCAN
Level 3 : SORT(JOIN) + SORT(JOIN) à DEPT 테이블을 SORT한것과 EMP 테이블을 SORT한 두개의 집합이 된다.
Level 2 : MERGE JOIN à Level 3에서 만들어진 두개의 집합을 Merge
Level 1 : SELECT STATEMENT à Merge Join을 수행하여 선택된 결과를 추출
 

  • 자바
  • 오라클/빅데이터
  • 아이폰/안드로이드
  • 닷넷/WPF
  • 표준웹/HTML5
  • 채용/취업무료교육
  • 초보자코스

  • 댓글 없음:

    댓글 쓰기