Programming/Oracle

ORACLE 실제 실행계획 확인하기!

초록깨비 2021. 12. 2. 16:33
728x90

ORACLE 실제 실행계획 

 

예상 실행계획만으로는 성능 개선이 어려울때가 있으므로 실제 실행계획을 보고 문제점을 찾을수 있어야 한다

 

실제 실행 계획 확인 하는 방법

  GATHER_PLAN_STATISTICS를 힌트로 사용 OR 세션에 트레이스를 거는 방법이 있음

 

1) GATHER_PLAN_STATISTICS 사용 법

     - SYS계정으로 접속하여

        V_$SQL

        V_$SQL_PLAN_STATISTICS_ALL

        V_$SQL_PLAN

        V_$SESSION에 SELECT 권한을 추가 한다

 

        GRANT SELECT ON V_$SQL TO USER_명 ; 

        GRANT SELECT ON V_$SQL_PLAN_STATISTICS_ALL TO USER_명 ; 

        GRANT SELECT ON V_$SQL_PLAN TO USER_명 ; 

        GRANT SELECT ON V_$SESSION TO USER_명 ; 

 

     - GATHER_PLAN_STATISTICS을 SQL문에 힌트로 추가 

        SELECT /*+ GATHER_PLAN_STATISTICS */

                   *

         FROM TB_SW23215 

        WHERE COMP_CD = '11'

            AND SANC_DT BETWEEN TO_DATE('20210101','YYYYMMDD') AND TO_DATE('20210103','YYYYMMDD') ; 

 

      - GATHER_PLAN_STATISTICS 힌트를 사용한 SQL의 SQL_ID와 CHILD_NUMBER 확인

         . USER로 접속 

 

           SELECT SQL_ID, CHILD_NUMBER, SQL_TEXT
             FROM V$SQL 
            WHERE SQL_TEXT LIKE '%GATHER_PLAN_STATISTICS%' ; 

 

         

 


  SELECT * 
   FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(SQL_ID, CHILD_NUMBER, 'ALLSTATS LAST')); 

 

     => 확인한 SQL_ID, CHILD_NUMBER를 넣어 조회 하면 아래와 같은 실제 실행계획이 나온다  

     

 

◈ 항목

    id : 실행계획의 오퍼레이션

    Operation : 해당 단계에 수행한 작업 내영

    Name : 해당 단계에 작업을 수행한 대상 오브젝트(테이블 or 인덱스)

    Starts : 해당 단계를 수행한 횟수

    E-Rows : 해당 단계의 예상 데이터 건수

    A-Rows : 해당 단계의 실제 데이터 건수

    A-Time : 해당 단계까지의 수행된 실제 시간(누적)

    Buffers : 해당 단계까지 메모리 버퍼에서 읽은 블록수(논리적 IO 횟수, 누적)

    Reads :  해당 단계까지 디스크에서 읽은 블록수(물리적 IO 횟수, 누적)

    

 

성능 개선을 위해서는 A-Rows, A-Time, Buffers를 확인해야 한다

     (높은 수치가 나오는 항목의 원인을 찾아 성능을 개선!!!)

 

 

 

728x90