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

Explain plan




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을 뽑아 사전점검
  • 통계정보 변경 등으로 인한 이유로 갑자기 성능이 나빠질 경우 이전 실행계획을 확인하고 예전과 같은 방식으로 수행되도록 할 수 있음

참조문서

서적(오라클 성능 고도화 원리와해법 I) : http://book.daum.net/detail/book.do?bookid=KOR9788996246015

문서정보

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