728x90
반응형



- 사용법



SQL>EXPLAIN PLAN FOR

        SELECT  * FROM DENSITY

        WHERE   c2 = '4'


Explained



SQL>SELECT *

        FROM table(dbms_xplan.display(format=>'advanced'))



PLAN_TABLE_OUTPUT

Plan hash value: 1518570146


-----------------------------------------------------------------------------

| Id  | Operation         | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

-----------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |              |   985 | 23640 |    13   (0)| 00:00:01 |

|*  1 |  TABLE ACCESS FULL| DENSITY |   985 | 23640 |    13   (0)| 00:00:01 |

-----------------------------------------------------------------------------


Query Block Name / Object Alias (identified by operation id):

-------------------------------------------------------------


   1 - SEL$1 / DENSITY@SEL$1


Outline Data

-------------


  /*+

      BEGIN_OUTLINE_DATA

      FULL(@"SEL$1" "DENSITY"@"SEL$1")

      OUTLINE_LEAF(@"SEL$1")

      ALL_ROWS

      OPT_PARAM('_optimizer_cost_model' 'cpu')

      DB_VERSION('11.2.0.1')

      OPTIMIZER_FEATURES_ENABLE('11.2.0.1')

      IGNORE_OPTIM_EMBEDDED_HINTS

      END_OUTLINE_DATA

  */


Predicate Information (identified by operation id):

---------------------------------------------------


   1 - filter("C2"=4)


Column Projection Information (identified by operation id):

-----------------------------------------------------------


   1 - "DENSITY"."C1"[NUMBER,22], "C2"[NUMBER,22],

       "DENSITY"."C3"[DATE,7], "DENSITY"."C4"[VARCHAR2,14]




EXPLAIN PLAN은 다음과 같은 특징이 있다.


1. 바인드 변수를 사용할 경우 변수의 타입과 값을 참조 하지 않는다.

   (varchar2 타입의 변수로만 판단하고 실행계획을 세움)

   

   --> 단지 바인드 변수가 사용이 되었다고만 판단하여 플랜을 생성.

         이로 인하여 number 타입의 변수를 사용하던, varchar2 타입의 변수를 사용하던 플랜이 같음  


2. 바인드 피킹이 활성화 되어 있어도, 바인드 피킹을 사용하지 않는다.


    --> 실제 들어온 바인드 변수 값을 활용하여 플랜을 생성하지 못함


3. EXPLAIN PLAN을 수행할 당시의 최신 통계정보를 사용하여 플랜을 생성한다.

   

   --> 운영중에 참조 테이블이나 인덱스에 변경이 가해지고, 통계정보가 갱신이 될 경우.

          통계정보를 생성 시 NO_INVALIDATE 옵션을 AUTO나 TRUE로 할경우 실제 runtime 쿼리에는 최신 통계정보가 

          적용되지 않지만, EXPLAIN PLAN 수행 시에는 최신 통계정보가 반영이 되어서 보여진다. 



위와 같은 특징으로 인하여 EXPLAIN PLAN을 수행했을 때의 플랜과 Runtime 시의 플랜(v$sql_plan)을 비교 했을 때

다른 경우가 발생 할 수 있음을 알고 사용해야 한다.


또, EXPLAIN PLAN을 수행하였던 세션과 Runtime으로 SQL을 수행하는 유저가 틀릴 경우 세션 파라메터의 차이로 Runtime 실행 계획이 다르게 될 수도 있다.

 


반응형

+ Recent posts