제35장 DBMS_SPH

내용 목차

35.1. 개요
35.2. 프러시저
35.2.1. REPORT_PLANS
35.2.2. REPORT_PLANS_BY_DATE
35.2.3. REPORT_PLAN_HISTORY
35.2.4. REPORT_PLAN_HISTORY_BY_DATE
35.2.5. TRUNCATE_PLAN_HISTORY
35.2.6. TRUNCATE_PLAN_HISTORY_BY_DATE
35.2.7. UPDATE_PLAN_HISTORY

본 장에서는 DBMS_SPH 패키지의 기본 개념과 패키지 내의 프러시저를 사용하는 방법을 설명한다.

DBMS_SPH 패키지는 SQL Plan History(이하 SPH) 기능을 사용하는데 필요로 하는 기능을 제공하기 위한 패키지이다. SPH는 서버가 실행한 SQL의 이력을 저장 및 관리해주는 기능이다.

Tibero는 SQL로부터 실행계획을 만들어 실행한다. 이 실행계획은 V$SQL_PLAN 등의 dynamic view를 통해 조회할 수 있다. 그러나 실행계획이 오래동안 사용되지 않거나 서버가 재부팅되면 그 실행계획은 메모리에서 삭제된다. 이 때문에 오랜 시간에 걸친 실행계획의 변화를 감지하고 추적하기가 어렵다.

SPH는 실행계획을 별도의 테이블에 저장함으로써 시간에 따른 실행계획 변화를 사용자가 쉽게 관리할 수 있게 도와준다. 단, 이 패키지는 SYS 사용자만 사용 가능하다.

본 절에서는 DBMS_SPH 패키지에서 제공하는 프러시저를 설명한다.

지정된 SQL의 실행계획 변화 이력을 출력한다. REPORT_PLANS_BY_DATE와 동작이 같으나 인자의 타입만 다르다. 결과는 화면에 출력할 수 있고 파일로 저장할 수도 있다. 화면에 출력을 원할 때(인자 TO_FILE이 FALSE일 때)는 serveroutput을 켜고 실행해야 한다.

다음은 결과가 파일로 저장되는 경로이다.

$TB_HOME/instance/$TB_SID/sph_report.{mthr_pid}.{current_time}

REPORT_PLANS 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    PROCEDURE REPORT_PLANS 
    (
        SQL_HASH_VALUE  IN NUMBER,
        DURATION          IN PLS_INTEGER    DEFAULT 24*365*1000,
        TO_FILE           IN BOOLEAN        DEFAULT TRUE
    );
  • 파라미터

    파라미터설명
    SQL_HASH_VALUE리포트할 SQL의 HASH VALUE이다.
    DURATION

    SQL의 이력을 출력할 기간이다. 인자는 시작 시점을 의미하며 종료 시점은 항상 현재이다.

    • 기준: 실행계획의 마지막 실행시간

    • 단위: 시간(hour)

    • 범위: 0~24*365*1000

    • 기본값: 24*365*1000시간(약 1000년)

    TO_FILE

    리포트 내용을 파일로 저장할지를 설정한다.

    • TRUE: 내용이 파일에 저장된다. (기본값)

    • FALSE: 내용이 화면에 출력된다.

  • 예외 상황

    예외 상황설명
    PARAMETER_OUT_OF_RANGE파라미터가 지정된 범위를 벗어난 경우이다.
  • 예제

    SQL> set serveroutput on
    
    SQL> select hash_value from v$sqlarea where sql_text like 'select hash_value%';
    
    HASH_VALUE
    ----------
    3870695416
    
    1 row selected.
    
    SQL> exec dbms_sph.report_plans(3870695416, 24, FALSE); 
                -- 화면에 하루 동안의 실행계획을 모두 출력
    
                             +-------------------------+
                             | SQL_PLAN_HISTORY REPORT |
                             +-------------------------+
    
    FROM: 1997/05/29 17:29:41
    TO:   1997/05/30 17:29:41
    
    ... 생략 ...

지정된 SQL의 실행계획 변화 이력을 출력한다. REPORT_PLANS와 동작이 같으나 인자의 타입만 다르다. 결과는 화면에 출력할 수 있고 파일로 저장할 수도 있다. 화면에 출력을 원할 때(인자 TO_FILE이 FALSE일 때)는 serveroutput을 켜고 실행해야 한다.

다음은 결과가 파일로 저장되는 경로이다.

$TB_HOME/instance/$TB_SID/sph_report.{mthr_pid}.{current_time}

REPORT_PLANS_BY_DATE 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    PROCEDURE REPORT_PLANS_BY_DATE 
    (
        SQL_HASH_VALUE  IN NUMBER,
        START_DATE        IN DATE       DEFAULT SYSDATE - 365*1000,
        TO_FILE           IN BOOLEAN    DEFAULT TRUE
    );
  • 파라미터

    파라미터설명
    SQL_HASH_VALUE리포트할 SQL의 HASH VALUE이다.
    START_DATE

    SQL의 이력을 출력할 기간의 시작 시점이다. 종료 시점은 항상 현재이다.

    • 기준: 실행계획의 마지막 실행 시간

    • 단위: 일(day)

    • 범위: SYSDATE - 365*1000 ~ SYSDATE

    • 기본값: SYSDATE - 365*1000(SYSDATE로부터 약 1000년)

    TO_FILE

    리포트 내용을 파일로 저장할지를 설정한다.

    • TRUE: 내용이 파일에 저장된다. (기본값)

    • FALSE: 내용이 화면에 출력된다.

  • 예외 상황

    예외 상황설명
    PARAMETER_OUT_OF_RANGE파라미터가 지정된 범위를 벗어난 경우이다.
  • 예제

    SQL> set serveroutput on
    
    SQL> select hash_value from v$sqlarea where sql_text like 'select hash_value%';
    
    HASH_VALUE
    ----------
    3870695416
    
    1 row selected.
    
    SQL> exec dbms_sph.report_plans_by_date(3870695416, sysdate - 1, FALSE); 
                -- 화면에 하루 동안의 실행계획을 모두 출력
    
                             +-------------------------+
                             | SQL_PLAN_HISTORY REPORT |
                             +-------------------------+
    
    FROM: 1997/05/29 17:49:11
    TO:   1997/05/30 17:49:11
    
    ... 생략 ...

조건을 만족하는 모든 SQL의 실행계획 변화 이력을 출력한다. REPORT_PLAN_HISTORY_BY_DATE와 동작이 같으나 인자의 타입만 다르다. 결과는 화면에 출력할 수 있고 파일로 저장할 수도 있다. 화면에 출력을 원할 때(인자 TO_FILE이 FALSE일 때)는 serveroutput을 켜고 실행해야 한다.

다음은 결과가 파일로 저장되는 경로이다.

$TB_HOME/instance/$TB_SID/sph_report.{mthr_pid}.{current_time}

REPORT_PLAN_HISTORY 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    PROCEDURE REPORT_PLAN_HISTORY 
    (
        DURATION          IN PLS_INTEGER  DEFAULT 24*365*1000,
        MIN_PLAN_COUNT    IN PLS_INTEGER  DEFAULT 1,
        TO_FILE           IN BOOLEAN      DEFAULT TRUE
    );
  • 파라미터

    파라미터설명
    DURATION

    SQL의 이력을 출력할 기간이다. 인자는 시작 시점을 의미하며 종료 시점은 항상 현재이다.

    • 기준: 실행계획의 마지막 실행 시간

    • 단위: 시간(hour)

    • 범위: 0~24*365*1000

    • 기본값: 24*365*1000시간(약 1000년)

    MIN_PLAN_COUNT

    출력할 SQL의 최소 실행계획 수이다. 예를 들어 2로 지정하면 둘 이상의 실행계획을 가지는 SQL만 출력한다.

    • 범위: 1 ~ 1000000

    • 기본값: 1

    TO_FILE

    리포트 내용을 파일로 저장할지를 설정한다.

    • TRUE: 내용이 파일에 저장된다. (기본값)

    • FALSE: 내용이 화면에 출력된다.

  • 예외 상황

    예외 상황설명
    PARAMETER_OUT_OF_RANGE파라미터가 지정된 범위를 벗어난 경우이다.
  • 예제

    SQL> set serveroutput on
    
    SQL> exec dbms_sph.report_plan_history(24, 1, FALSE);
                    -- 화면에 하루 동안 실행된 모든 SQL의 실행계획을 모두 출력
    
                             +-------------------------+
                             | SQL_PLAN_HISTORY REPORT |
                             +-------------------------+
    
    FROM: 1997/05/29 17:49:11
    TO:   1997/05/30 17:49:11
    
    ... 생략 ...

조건을 만족하는 모든 SQL의 실행계획 변화 이력을 출력한다. REPORT_PLAN_HISTORY와 동작이 같으나 인자의 타입만 다르다. 결과는 화면에 출력할 수 있고 파일로 저장할 수도 있다. 화면에 출력을 원할 때(인자 TO_FILE이 FALSE일 때)는 serveroutput을 켜고 실행해야 한다.

다음은 결과가 파일로 저장되는 경로이다.

$TB_HOME/instance/$TB_SID/sph_report.{mthr_pid}.{current_time}

REPORT_PLAN_HISTORY_BY_DATE 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    PROCEDURE REPORT_PLAN_HISTORY_BY_DATE 
    (
        START_DATE        IN DATE         DEFAULT SYSDATE - 365*1000,
        MIN_PLAN_COUNT    IN PLS_INTEGER  DEFAULT 1,
        TO_FILE           IN BOOLEAN      DEFAULT TRUE
    );
  • 파라미터

    파라미터설명
    START_DATE

    SQL의 이력을 출력할 기간의 시작 시점이다. 종료 시점은 항상 현재이다.

    • 기준: 실행계획의 마지막 실행 시간

    • 단위: 일(day)

    • 범위: SYSDATE - 365*1000 ~ SYSDATE

    • 기본값: SYSDATE - 365*1000(SYSDATE로부터 약 1000년)

    MIN_PLAN_COUNT

    출력할 SQL의 최소 실행계획 수이다. 예를 들어 2로 지정하면 둘 이상의 실행계획을 가지는 SQL만 출력한다.

    • 범위: 1 ~ 1000000

    • 기본값: 1

    TO_FILE

    리포트 내용을 파일로 저장할지를 설정한다.

    • TRUE: 내용이 파일에 저장된다. (기본값)

    • FALSE: 내용이 화면에 출력된다.

  • 예외 상황

    예외 상황설명
    PARAMETER_OUT_OF_RANGE파라미터가 지정된 범위를 벗어난 경우이다.
  • 예제

    SQL> set serveroutput on
    
    SQL> exec dbms_sph.report_plan_history_by_date(sysdate - 1, 1, FALSE); 
                     -- 화면에 하루 동안 실행된 모든 SQL의 실행계획을 모두 출력
    
                             +-------------------------+
                             | SQL_PLAN_HISTORY REPORT |
                             +-------------------------+
    
    FROM: 1997/05/29 17:49:11
    TO:   1997/05/30 17:49:11
    
    ... 생략 ...