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를 명시한 문장에 대하여 표시할 수 있다.
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'
실행계획의 단계별 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
단계별 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
단계별 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>
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의 힌트를 확인하고 이를 이용하여 실행계획을 핸들링할 수 도 있다.
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