본문 바로가기

Oracle

dbms_xplan.display

DBMS_XPLAN.DISPLAY

  DBMS_XPLAN.DISPLAY는 단일 SQL문에 대해 예측 실행계획을 보여주는 Function 이다.

  DBMS_XPLAN.DISPLAY는 실측 정보가 아닌 예측 정보를 제공한다.

Function Parameter

 
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이 저장되는 테이블을 지정하며, 기본값은 'PLAN_TABLE' 이다.
STATEMENT_ID Execution Plan시 SET STATEMENT_ID를 지정한 경우 이를 불러올 수 있다.
값이 NULL일 경우 마지막에 실행된 문장을 불러온다.
FORMAT BASIC 가장 기본적인 정보만 보여 준다.
TYPICAL Format의 Default값인 Typical은 SQL 튜닝에 필요한 Normal한 정보를 보여 준다.
SQL 튜닝에 가장 유용하게 사용되는 Predicate Information이 제공 된다.
ALL Typical Format에 Query Block NameColumn Projection Information이 추가로 제공된다
OUTLINE Typical Format에 추가적으로 Hidden Hint인 Outline Global Hint를 제공한다
ADVANCED ALL FormatOUTLINE Format를 합친 정보를 제공한다
FILTER_PREDS 저장된 PLAN에서 일부 Row 또는 Row Set을 제한하여 출력할 수 있다.

사용방법

1. SQL*PLUS open
  • - Oracle Client인 SQL*PLUS를 실행한다.
2. EXPLAIN PLAN FOR + SQL;
  • - 분석하고자 하는 SQL을 'EXPLAIN PLAN FOR' 다음에 넣고 Enter
3. SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
  • - SQLEXPLAIN 되었으면 그 다음에 원하는 포멧으로 출력한다.
  • - 위와 같이 하였으면 기본적으로 'PLAN_TABLE’과 'TYPICAL' Format으로 출력하겠다는 의미임

간단 예제.

간단한 예제를 한 번 실행해 보자

 
-- 실행계획 수집
SQL> EXPLAIN PLAN FOR
SELECT *
FROM EMP E
WHERE E.EMPNO = 9999999
AND E.DEPTNO = 10;

-- 실행계획 조회
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------
Plan hash value: 3475272958

--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 18 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 18 | 3 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | EMP_U1 | 1 | | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------

1 - filter("E"."DEPTNO"=10)
2 - access("E"."EMPNO"=9999999)

15 rows selected.