by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

실행 계획 예측




Display

DISPLAY is generally used to display the execution plan produced
by an EXPLAIN PLAN command; you can either display the most
recent explained statement, or the statement for a specific statement id.

Display 는 일반적으로 explain plan command에 의해서 생성된 실행개획을 표시하는데 사용된다.
마지막 사용된 문장과  statement id를 명시한 문장에 대하여 표시할 수 있다.

Display Table Function 함수설명

 function display(table_name varchar2 default 'PLAN_TABLE',
         statement_id varchar2 default null,
         format varchar2 default 'TYPICAL',
         filter_preds varchar2 default null)

  - table_name:
        Execution plan이 저장되는 테이블을 지정한다.
        Default는 "PLAN_TABLE"이다
        만약 NULL을 지정하면 해당 계정의 "PLAN_TABLE"을 의미한다.

  - statement_id:
        Explain plan 시 set Statement_id를 지정한 경우 사용할 수 있다.
        Default는 NULL이다.
        NULL인 경우 마지막 실행된 문장을 의미한다.
        또한 뒤에 나오는 "filter_preds" parameter 도 NULL이 된다.

  - format:
        저장된 Plan을 어떻게 보여줄지 결정한다.
        Default는 TYPICAL이다.        
        매뉴얼에 공개되어 있는 포맷과 사용되기는 하나 매뉴얼에 없는 포멧이 존재한다.(함수안에 Define되어 있을듯 하다)
        포멧에 'ALL -PROJECTION -NOTE'와 같이 -옵션을 주면 해당 내용을 제외하고 출력할 수 있다.
        또한 "BASIC ROWS" 기존포멧에 없는 경우 내용을 추가할 수 있다.

  - filter_preds:
        저장된 Plan에서 일부 Row 또는 Row Set을 제한하여 출력한다.
        Default는 NULL이다.
        'plan_id = 10'
        'hash_value=76725 and snap_id=245'

Format

Basic

실행계획의 단계별 Operation과 Object 이름만을 보여주는 기본적인 format

WOONG@ORCL>select * from table(dbms_xplan.display('plan_table',null,'basic'));

PLAN_TABLE_OUTPUT
----------------------------------------------------------
Plan hash value: 2521935493

------------------------------------
| Id  | Operation         | Name   |
------------------------------------
|   0 | SELECT STATEMENT  |        |
|   1 |  TABLE ACCESS FULL| T_PLAN |
------------------------------------

8 개의 행이 선택되었습니다.

경   과: 00:00:00.04

Typical

단계별 Operation과 Object 명, 예측 Row수와 Result Set의 크기(Bytes), Predicate 정보를 보여준다.

WOONG@ORCL>select * from table(dbms_xplan.display('plan_table',null,'typical'));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------
Plan hash value: 2521935493

----------------------------------------------------------------------------
| Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |        | 10000 | 90000 |     8   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T_PLAN | 10000 | 90000 |     8   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("COL1"='Many1')

13 개의 행이 선택되었습니다.

경   과: 00:00:00.06

WOONG@ORCL>set autotrace traceonly
WOONG@ORCL>
WOONG@ORCL>select col1, col2 from t_plan where col1 = 'Many1';

10000 개의 행이 선택되었습니다.

경   과: 00:00:00.28

Execution Plan
----------------------------------------------------------
Plan hash value: 2521935493

----------------------------------------------------------------------------
| Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |        | 10000 | 90000 |     8   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T_PLAN | 10000 | 90000 |     8   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("COL1"='Many1')


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        711  consistent gets
          0  physical reads
          0  redo size
     174886  bytes sent via SQL*Net to client
       7726  bytes received via SQL*Net from client
        668  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      10000  rows processed

WOONG@ORCL>
WOONG@ORCL>set autotrace off

Serial

All

단계별 Operation과 Object 명, 예측 Row수와 Result Set의 크기(Bytes), Predicate, Query Block, Column Projection 정보를 보여준다.

WOONG@ORCL>select * from table(dbms_xplan.display('plan_table',null,'all'));

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Plan hash value: 2991289126

--------------------------------------------------------------------------------------------
| Id  | Operation                     | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |            |     1 |    33 |     2   (0)| 00:00:01 |
|*  1 |  VIEW                         |            |     1 |    33 |     2   (0)| 00:00:01 |
|   2 |   COUNT                       |            |       |       |            |          |
|   3 |    TABLE ACCESS BY INDEX ROWID| T_PLAN     |     1 |     9 |     2   (0)| 00:00:01 |
|*  4 |     INDEX RANGE SCAN          | T_PLAN_IDX |     1 |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------

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

   1 - SUB / from$_subquery$_001@MAIN
   2 - SUB
   3 - SUB / T_PLAN@SUB
   4 - SUB / T_PLAN@SUB

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("COL2"<=200)
   4 - access("COL1"='Many2')

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "from$_subquery$_001"."COL1"[VARCHAR2,10], "COL2"[NUMBER,22],
       "from$_subquery$_001"."RN"[NUMBER,22]
   2 - "COL1"[VARCHAR2,10], "COL2"[NUMBER,22], ROWNUM[4]
   3 - "COL1"[VARCHAR2,10], "COL2"[NUMBER,22]
   4 - "T_PLAN".ROWID[ROWID,10], "COL1"[VARCHAR2,10]

34 개의 행이 선택되었습니다.

경   과: 00:00:00.20
WOONG@ORCL>

Outline

Typical format에 실행계획을 수립하는데 필요한 Hint들의 목록을 추가적으로 제공한다.

특정 실행계획을 재현하기 위한 용도로 사용가능하다.

WOONG@ORCL>select * from table(dbms_xplan.display('plan_table',null,'outline'));

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------
Plan hash value: 2521935493

----------------------------------------------------------------------------
| Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |        | 10000 | 90000 |     8   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T_PLAN | 10000 | 90000 |     8   (0)| 00:00:01 |
----------------------------------------------------------------------------

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      FULL(@"SEL$1" "T_PLAN"@"SEL$1")
      OUTLINE_LEAF(@"SEL$1")
      OPTIMIZER_FEATURES_ENABLE('10.2.0.3')
      IGNORE_OPTIM_EMBEDDED_HINTS
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("COL1"='Many1')

25 개의 행이 선택되었습니다.

경   과: 00:00:00.82

Outline의 힌트를 확인하고 이를 이용하여 실행계획을 핸들링할 수 도 있다.

Advanced

All format과 Outline format을 합친 내용과 같다.

WOONG@ORCL>select * from table(dbms_xplan.display('plan_table',null,'advanced'));

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------
Plan hash value: 2521935493

----------------------------------------------------------------------------
| Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |        | 10000 | 90000 |     8   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T_PLAN | 10000 | 90000 |     8   (0)| 00:00:01 |
----------------------------------------------------------------------------

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

   1 - SEL$1 / T_PLAN@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      FULL(@"SEL$1" "T_PLAN"@"SEL$1")
      OUTLINE_LEAF(@"SEL$1")
      OPTIMIZER_FEATURES_ENABLE('10.2.0.3')
      IGNORE_OPTIM_EMBEDDED_HINTS
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("COL1"='Many1')

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "COL1"[VARCHAR2,10], "COL2"[NUMBER,22]

35 개의 행이 선택되었습니다.

경   과: 00:00:00.14

문서에 대하여

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.