오라클 성능 고도화 원리와 해법 I (2012년)
Explain Plan 0 0 65,423

by 구루비스터디 Explain Plan 실행계획 [2018.03.20]


Introduction

  • Explain Plan은 SQL을 수행하기 전 데이터를 어떻게 가져올 건지에 대한 실행계획을 의미하며 이 실행계획을 확인 하고자 할때 Explain Plan For명령어를 사용


Explain Plan 생성

  • Explain Plan을 생성하려면 @?/rdbms/admin/utlxplan.sql 을 실행
  • Oracle 10g 부터는 설치 시 기본적으로 sys.plan_table$를 제공하므로 별도의 Plan Table을 생성하지 않아도 됨
  • 참고로 ? 는 $ORACLE_HOME 디렉토리를 대체하는 기호


Explain Plan For 명령어를 수행을 통해 Plan_Table에 실행계획을 저장 할 수 있음
  • set statement_id ='query1' 는 생략 가능함
  • 9i 이전에는 plan_table를 직접 쿼리(p 159), 9i부터는 아래 오라클에서 제공하는 스크립트로 확인 가능
  • utlxpls 싱글 실행 계획
  • utlxplp 병렬 실행 계획

SQL > set linesize 200 
SQL > Explain plan set statement_id ='query1' for 
2     select * from emp where empno = 7900; 

해석되었습니다.

SQL > @?/rdbms/admin/utlxpls

SQL > plan_table_output
 plan_table_output                                                                               
 -----------------------------------------------------------------------------  
|ID | Operation                         | Name | Rows | Bytes | Cost (%CPU)  |
 ----------------------------------------------------------------------------- 
|  0| SELECT STATEMENT                  |      |      |     32|     1     (0)|
|  1|  TABLE ACCESS BY INDEX ROWID      |EMP   |     1|     32|     1     (0)|
|* 2|   INDEX UNIQUE SCAN               |EMP_PK|     1|       |     0     (0)|
 -----------------------------------------------------------------------------

 -----------------------------------------------------------------------------
Predicate Information (identified by operation id):
-----------------------------------------------------------------------------
  2- access("EMPNO"=7900)


Predicate Information 은 아래와 같이 세 가지 유형이 존재함
  • 인덱스 Access Predicate : 인덱스를 통해 스캔의 범위를 결정하는데 영향을 미치는 조건절
  • 인덱스 Filter Predicate : 인덱스를 통했으나 스캔의 범위를 결정하는 영향을 미치지 못하는 조건절
  • 테이블 Access Predicate : NL 조인을 제외한 조인에서 발생하며 결과 값의 범위를 결정하는데 영향을 미치는 조건절
  • 테이블 Filter Predicate : 테이블 스캔 후 최종 결과 집합 포함 여부를 결정하는데 영향을 미치는 조건절


  • Explain Plan For 명령어를 통해 실행계획을 별도로 저장해 둔다면 이를 활용해 안정적인 시스템 운영 및 성능관리에 활용 할 수 있음
  • 인덱스 구조 변경 시 사용하는 SQL을 뽑아 사전점검
  • 통계정보 변경 등으로 인한 이유로 갑자기 성능이 나빠질 경우 이전 실행계획을 확인하고 예전과 같은 방식으로 수행되도록 할 수 있음


참조문서

코어 오라클 데이터베이스 스터디 모임 에서 2012년에 오라클 성능 고도화 원리와 해법 I 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3083

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입