제41장 DBMS_TPR

내용 목차

41.1. 개요
41.2. 프러시저
41.2.1. CREATE_SNAPSHOT
41.2.2. CREATE_SNAPSHOT_ALL
41.2.3. REPORT_TEXT
41.2.4. REPORT_TEXT_ID
41.2.5. REPORT_TEXT_GID
41.2.6. REPORT_TEXT_LAST
41.2.7. REPORT_TEXT_SPECIFIC_TIMES
41.2.8. REPORT_TEXT_MARKED
41.2.9. REPORT_HTML
41.2.10. REPORT_HTML_ID
41.2.11. REPORT_HTML_GID
41.2.12. REPORT_HTML_LAST
41.2.13. REPORT_HTML_SPECIFIC_TIMES
41.2.14. REPORT_HTML_MARKED
41.2.15. FLUSH_ASH
41.2.16. ASH_REPORT_TEXT
41.2.17. CREATE_BASELINE
41.2.18. CREATE_BASELINE_ID
41.2.19. DROP_BASELINE
41.2.20. DROP_BASELINE_ID
41.2.21. BASELINE_REPORT_TEXT
41.2.22. BASELINE_REPORT_TEXT_ID

본 장에서는 DBMS_TPR 패키지의 기본 개념과 패키지 내의 프러시저를 사용하는 방법을 설명한다. 보다 자세한 설명은 "Tibero 관리자 안내서"의 "제14장 Tibero Performance Repository"을 참조하기 바란다.

DBMS_TPR 패키지는 Tibero Performance Repository(이하 TPR) 기능을 사용하는데 필요로 하는 기능을 제공하기 위한 패키지이다.

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

특정 요일, 시간대에 해당되는 스냅샷들에 대한 성능 분석 리포트(text)를 생성한다.

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

  • 프로토타입

    PROCEDURE REPORT_TEXT_SPECIFIC_TIMES(
       begin_time        IN DATE
       end_time          IN DATE
       begin_hour        IN VARCHAR2
       end_hour          IN VARCHAR2
       days              IN VARCHAR2
       instance_no       IN VARCHAR2
       file_name         IN VARCHAR
    );
  • 파라미터

    파라미터설명
    begin_time성능 분석 리포트 대상 구간 중 시작 날짜와 시간이다. DATE 타입이므로 사용 중인 DATE 포맷에 맞게 입력한다.
    end_time성능 분석 리포트 대상 구간 중 종료 날짜와 시간이다. DATE 타입이므로 사용 중인 DATE 포맷에 맞게 입력한다.
    begin_hour성능 분석 리포트 대상 구간 중 출력되는 스냅샷 시간대의 시작 시간이다. VARCHAR2 타입으로 'HH24:MM' 포맷을 따라야 한다. (예: 09:00)
    end_hour성능 분석 리포트 대상 구간 중 출력되는 스냅샷 시간대의 종료 시간이다. VARCHAR2 타입으로 'HH24:MM' 포맷을 따라야 한다. (예: 18:00)
    days

    성능 분석 리포트 대상 구간 중 리포트 출력할 스냅샷의 요일이다.

    (기본값: MON,TUE,WED,THU,FRI,SAT,SUN)

    instance_no성능 분석 리포트 대상 인스턴스 번호이다. (기본값: ALL)
    file_name

    만들어질 성능 분석 리포트 파일명이다.

    (기본값: tpr_report.{db_name}.{current_time}.txt)

  • 예제

    아래의 예제는 1월 1일 00:00부터 2월 1일 23:59:59 사이에 월,수,금 오전 9시부터 오후 6시까지에 해당하는 스냅샷에 대한 리포트 생성을 하는 예제이다.

    exec DBMS_TPR.REPORT_TEXT_SPECIFIC_TIMES('2015/01/01 00:00:00', 
                                             '2015/02/01 23:59:59', 
                                             '09:00', '18:00', 'MON,WED,FRI');
    /

    파라미터 중 instance_no를 입력하면 해당 인스턴스를 대상으로 하는 리포트를 출력한다. 입력하지 않는 경우 기본적으로 모든 인스턴스를 대상으로 리포트를 출력한다.

    exec DBMS_TPR.REPORT_TEXT_SPECIFIC_TIMES( '2015/01/01 00:00:00', 
                                              '2015/02/01 23:59:59', 
                                              '09:00', '18:00', 
                                              'MON,WED,FRI', instance_no=>'1');
    /

    파라미터 중 file_name을 지정하면 지정된 파일명의 리포트를 출력한다.

    exec DBMS_TPR.REPORT_TEXT_SPECIFIC_TIMES('2015/01/01 00:00:00', 
                                             '2015/02/01 23:59:59', 
                                             '09:00', '18:00', 'MON,WED,FRI', 
                                             instance_no=>'1', 'workinghours.txt');
    /

유저가 지정한 스냅샷들에 대한 성능 분석 리포트(text)를 생성한다.

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

  • 프로토타입

    PROCEDURE REPORT_TEXT_MARKED
    (
       file_name         IN VARCHAR
    );
  • 파라미터

    파라미터설명
    file_name

    만들어질 성능 분석 리포트 파일명이다.

    (기본값: tpr_report.{db_name}.{current_time}.txt)

  • 예제

    지정한 스냅샷에 대한 리포트를 생성해주기 때문에 먼저 출력할 스냅샷을 지정해야 한다.

    V$TPR_SNAPSHOT을 조회하면 스냅샷과 관련된 정보 및 marking되었는지 여부를 볼 수 있다.

    select * from V$TPR_SNAPSHOT;
    /
       SNAP_ID    THREAD# INSTANCE_NUMBER BEGIN_INTERVAL_TIME             
       ---------- ---------- --------------- --------------------------------
       END_INTERVAL_TIME                  SNAP_GID MARKED_FOR_REPORT
       -------------------------------- ---------- -----------------
                1          0               0 2015/11/26
                2015/11/26                                  N
    
                2          0               0 2015/11/27
                2015/11/27                                  N
    /

    SNAP_ID 2번에 해당하는 리포트를 출력하기 위해 다음과 같은 query를 실행한다.

    update V$TPR_SNAPSHOT set MARKED_FOR_REPORT='Y' where SNAP_ID=2;
    commit;
    /

    V$TPR_SNAPSHOT을 다시 조회하면 원하는 스냅샷이 marking되었음을 확인할 수 있다.

       SNAP_ID    THREAD# INSTANCE_NUMBER BEGIN_INTERVAL_TIME             
       ---------- ---------- --------------- --------------------------------
       END_INTERVAL_TIME                  SNAP_GID MARKED_FOR_REPORT
       -------------------------------- ---------- -----------------
                1          0               0 2015/11/26
                2015/11/26                                  N
    
                2          0               0 2015/11/27
                2015/11/27                                  Y
    /

    원하는 스냅샷을 모두 marking하였으면 리포트 출력을 실행시킨다.

    exec DBMS_TPR.REPORT_TEXT_MARKED();
    /

    파라미터 중 file_name을 지정하면 지정된 파일명의 리포트를 출력한다.

    exec DBMS_TPR.REPORT_TEXT_MARKED('marked.txt');
    /

특정 요일, 시간대에 해당되는 스냅샷들에 대한 성능 분석 리포트(html)를 생성한다.

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

  • 프로토타입

    PROCEDURE REPORT_HTML_SPECIFIC_TIMES
    (
       begin_time        IN DATE
       end_time          IN DATE
       begin_hour        IN VARCHAR2
       end_hour          IN VARCHAR2
       days              IN VARCHAR2
       instance_no       IN VARCHAR2
       file_name         IN VARCHAR
    );
  • 파라미터

    파라미터설명
    begin_time성능 분석 리포트 대상 구간 중 시작 날짜와 시간이다. DATE 타입이므로 사용 중인 DATE 포맷에 맞게 입력해야 한다.
    end_time성능 분석 리포트 대상 구간 중 종료 날짜와 시간이다. DATE 타입이므로 사용 중인 DATE 포맷에 맞게 입력해야 한다.
    begin_hour성능 분석 리포트 대상 구간 중 출력되는 스냅샷 시간대의 시작 시간이다. VARCHAR2 타입으로 'HH24:MM' 포맷을 따라야 한다. (예: 09:00)
    end_hour성능 분석 리포트 대상 구간 중 출력되는 스냅샷 시간대의 종료 시간이다. VARCHAR2 타입으로 'HH24:MM' 포맷을 따라야 한다. (예: 18:00)
    days

    성능 분석 리포트 대상 구간 중 리포트 출력할 스냅샷의 요일이다.

    (기본값: MON,TUE,WED,THU,FRI,SAT,SUN)

    instance_no성능 분석 리포트 대상 인스턴스 번호이다. (기본값: ALL)
    file_name

    만들어질 성능 분석 리포트 파일명이다.

    (기본값: tpr_report.{db_name}.{current_time}.txt)

  • 예제

    아래의 예제는 1월 1일 00:00부터 2월 1일 23:59:59 사이에 월,수,금 오전 9시 부터 오후 6시까지에 해당하는 스냅샷에 대한 리포트 생성을 하는 예제이다.

    exec DBMS_TPR.REPORT_HTML_SPECIFIC_TIMES( '2015/01/01 00:00:00', 
                                              '2015/02/01 23:59:59', 
                                              '09:00', '18:00', 'MON,WED,FRI');
    /

    파라미터 중 instance_no를 입력하면 해당 인스턴스를 대상으로 하는 리포트를 출력한다. 입력하지 않는 경우 기본적으로 모든 인스턴스를 대상으로 리포트를 출력한다.

    exec DBMS_TPR.REPORT_HTML_SPECIFIC_TIMES( '2015/01/01 00:00:00',
                                              '2015/02/01 23:59:59', 
                                              '09:00', '18:00', 'MON,WED,FRI', 
                                              instance_no=>'1');
    /

    파라미터 중 file_name을 지정하면 지정된 파일명의 리포트를 출력한다.

    exec DBMS_TPR.REPORT_HTML_SPECIFIC_TIMES( '2015/01/01 00:00:00', 
                                              '2015/02/01 23:59:59', 
                                              '09:00', '18:00', 'MON,WED,FRI', 
                                              instance_no=>'1', 'workinghours.txt');
    /

유저가 지정한 스냅샷들에 대한 성능 분석 리포트(html)를 생성한다.

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

  • 프로토타입

    PROCEDURE REPORT_HTML_MARKED
    (
       file_name         IN VARCHAR
    );
  • 파라미터

    파라미터설명
    file_name

    만들어질 성능 분석 리포트 파일명이다.

    (기본값: tpr_report.{db_name}.{current_time}.txt)

  • 예제

    지정한 스냅샷에 대한 리포트를 생성해주기 때문에 먼저 출력할 스냅샷을 지정해야한다.

    V$TPR_SNAPSHOT을 조회하면 스냅샷과 관련된 정보 및 marking되었는지 여부를 볼 수 있다.

    select * from V$TPR_SNAPSHOT;
    /
       SNAP_ID    THREAD# INSTANCE_NUMBER BEGIN_INTERVAL_TIME             
       ---------- ---------- --------------- --------------------------------
       END_INTERVAL_TIME                  SNAP_GID MARKED_FOR_REPORT
       -------------------------------- ---------- -----------------
                1          0               0 2015/11/26
                2015/11/26                                  N
    
                2          0               0 2015/11/27
                2015/11/27                                  N
    /

    SNAP_ID 2번에 해당하는 리포트를 출력하기 위해 다음과 같은 query를 실행한다.

    update V$TPR_SNAPSHOT set MARKED_FOR_REPORT='Y' where SNAP_ID=2;
    commit;
    /

    V$TPR_SNAPSHOT을 다시 조회하면 원하는 스냅샷이 marking되었음을 확인할 수 있다.

       SNAP_ID    THREAD# INSTANCE_NUMBER BEGIN_INTERVAL_TIME             
       ---------- ---------- --------------- --------------------------------
       END_INTERVAL_TIME                  SNAP_GID MARKED_FOR_REPORT
       -------------------------------- ---------- -----------------
                1          0               0 2015/11/26
                2015/11/26                                  N
    
                2          0               0 2015/11/27
                2015/11/27                                  Y
    /

    원하는 스냅샷을 모두 marking하였으면 리포트 출력을 실행시킨다.

    exec DBMS_TPR.REPORT_HTML_MARKED();
    /

    파라미터 중 file_name을 지정하면 지정된 파일명의 리포트를 출력한다.

    exec DBMS_TPR.REPORT_HTML_MARKED('marked.txt');
    /

특정 구간의 ASH 성능 분석 리포트(text)를 생성한다.

ASH 샘플은 IPARAM(ACTIVE_SESSION_HISTORY)을 Y로 설정했을 때만 남게 되며, ASH 리포트는 이 샘플들의 정보를 취합하여 리포트를 작성한다.

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

  • 프로토타입

    PROCEDURE ASH_REPORT_TEXT
    (
        begin_time       IN DATE
        end_time         IN DATE
        instance_no      IN VARCHAR
        file_name        IN VARCHAR
    );
  • 파라미터

    파라미터설명
    begin_time성능 분석 리포트 대상 구간 중 시작 시간이다.
    end_time성능 분석 리포트 대상 구간 중 종료 시간이다.
    instance_no성능 분석 리포트 대상 인스턴스 번호이다. (기본값: ALL)
    file_name

    만들어질 성능 분석 리포트 파일명이다.

    (기본값: ash_report.{db_name}.{current_time}.txt)

  • 예제

    아래의 예제는 두 개의 인자 모두 DATE 타입이므로 사용 중인 DATE 포맷에 맞게 입력해야 한다.

    exec DBMS_TPR.ASH_REPORT_TEXT( '2015/01/29 21:00:00', 
                                   '2015/01/29 22:59:59');
    /

    파라미터 중 file_name을 지정하면 지정된 파일명의 리포트를 출력한다.

    exec DBMS_TPR.ASH_REPORT_TEXT( '2015/01/29 21:00:00', 
                                   '2015/01/29 22:59:59', 
                                   file_name=>'ash.txt');
    /

    파라미터 중 instance_no를 입력하면 해당 인스턴스를 대상으로 하는 리포트를 출력한다. 입력하지 않는 경우 기본적으로 모든 인스턴스를 대상으로 리포트를 출력한다.

    exec DBMS_TPR.ASH_REPORT_TEXT( '2015/01/29 21:00:00',
                                   '2015/01/29 22:59:59', 
                                  instance_no=>'1');
    /

특정 구간에 대한 TPR 스냅샷을 Baseline으로 지정한다. 프러시저 실행시 입력된 시작 시간과 종료 시간 사이에 존재하는 TPR 스냅샷들을 Baseline에 등록한다. Baseline에 등록된 TPR 스냅샷들은 Retention 기간을 넘겨도 파기되지 않고 남아있게 된다. 등록된 Baseline에 관한 내용은 _TPR_BASELINE 테이블을 조회하여 확인할 수 있다.

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

  • 프로토타입

    PROCEDURE CREATE_BASELINE
    (
        begin_time       IN DATE
        end_time         IN DATE
        instance_no      IN VARCHAR
        baseline_name    IN VARCHAR
        expiration       IN NUMBER
    );
  • 파라미터

    파라미터설명
    begin_timeBaseline에 포함될 TPR 스냅샷 범위의 시작시간이다.
    end_timeBaseline에 포함될 TPR 스냅샷 범위의 종료시간이다.
    instance_noBaseline 대상 인스턴스 번호이다. (기본값: ALL)
    baseline_name만들어질 Baseline의 이름이다. (기본값: BASELINE{BASELINE_ID})
    expirationBaseline 자체의 Expiration 기간이다. (기본값: Null, 단위: Hours)
  • 예제

    아래의 예제는 두 개의 인자 모두 DATE 타입이므로 사용 중인 DATE 포맷에 맞게 입력해야 한다.

    exec DBMS_TPR.CREATE_BASELINE( '2015/01/29 21:00:00', 
                                   '2015/01/29 22:59:59');
    /

    파라미터 중 baseline_name을 지정하면 입력된 이름으로 된 Baseline을 생성한다.

    exec DBMS_TPR.CREATE_BASELINE( '2015/01/29 21:00:00', 
                                   '2015/01/29 22:59:59', 
                                    baseline_name=>'my_baseline');
    /

    파라미터 중 instance_no를 입력하면 해당 인스턴스를 대상으로 하는 Baseline을 생성한다. 입력하지 않는 경우 기본적으로 모든 인스턴스를 대상으로 하는 Baseline을 생성한다.

    exec DBMS_TPR.CREATE_BASELINE( '2015/01/29 21:00:00', 
                                   '2015/01/29 22:59:59',
                                   instance_no=>'1');
    /

    파라미터 중 expiration을 입력하면 expiration이 등록된 Baseline이 생성된다. 이러한 Baseline은 생성 후 지정된 expiration만큼의 시간(hrs)이 흐른 뒤 해당 Baseline이 자동 삭제된다. 명시적으로 expiration을 지정하지 않은 경우 사용자가 직접 Baseline을 삭제하기 전까지 Baseline은 삭제되지 않는다.

    exec DBMS_TPR.CREATE_BASELINE( '2015/01/29 21:00:00', 
                                   '2015/01/29 22:59:59', 
                                    expiration=>168);
    /

특정 스냅샷 ID 혹은 ID 구간을 Baseline으로 지정한다.

CREATE_BASELINE_ID 프러시저는 input이 특정 ID 혹은 ID 구간 두 종류로 나뉘어지며, 그 세부 내용은 다음과 같다.

  • 특정 ID

    • 프로토타입

      PROCEDURE CREATE_BASELINE_ID
      (
          one_snap_id    IN NUMBER
          baseline_name    IN VARCHAR
          expiration       IN NUMBER
      );
    • 파라미터

      파라미터설명
      one_snap_idBaseline에 포함될 TPR 스냅샷 ID이다.
      baseline_name만들어질 Baseline의 이름이다. (기본값: BASELINE{BASELINE_ID})
      expirationBaseline 자체의 Expiration 기간이다. (기본값: Null, 단위: Hours)
    • 예제

      exec DBMS_TPR.CREATE_BASELINE_ID(30);
      /

      파라미터 중 baseline_name을 지정하면 입력된 이름으로 된 Baseline을 생성한다.

      exec DBMS_TPR.CREATE_BASELINE_ID(30, baseline_name=>'my_baseline');
      /

      파라미터 중 expiration을 입력하면 expiration이 등록된 Baseline이 생성된다. 이러한 Baseline은 생성 후 지정된 expiration만큼의 시간(hrs)이 흐른 뒤 해당 Baseline이 자동 삭제된다. 명시적으로 expiration을 지정하지 않은 경우 사용자가 직접 Baseline을 삭제하기전까지 Baseline은 삭제되지 않는다.

      exec DBMS_TPR.CREATE_BASELINE_ID(30, expiration=>168);
      /
  • ID 구간

    • 프로토타입

      PROCEDURE CREATE_BASELINE_ID
      (
          begin_snap_id    IN NUMBER
          end_snap_id      IN NUMBER
          instance_no      IN VARCHAR
          baseline_name    IN VARCHAR
          expiration       IN NUMBER
      );
    • 파라미터

      파라미터설명
      begin_snap_idBaseline에 포함될 TPR 스냅샷 범위의 시작 ID이다.
      end_snap_idBaseline에 포함될 TPR 스냅샷 범위의 종료 ID이다.
      instance_noBaseline 대상 인스턴스 번호이다. (기본값: ALL)
      baseline_name만들어질 Baseline의 이름이다. (기본값: BASELINE{BASELINE_ID})
      expirationBaseline 자체의 Expiration 기간이다. (기본값: Null, 단위: Hours)
    • 예제

      exec DBMS_TPR.CREATE_BASELINE_ID(30, 50);
      /

      파라미터 중 baseline_name을 지정하면 입력된 이름으로 된 Baseline을 생성한다.

      exec DBMS_TPR.CREATE_BASELINE_ID(30, 50, baseline_name=>'my_baseline');
      /

      파라미터 중 instance_no를 입력하면 해당 인스턴스를 대상으로 하는 Baseline을 생성한다. 입력하지 않는 경우 기본적으로 모든 인스턴스를 대상으로 하는 Baseline을 생성한다.

      exec DBMS_TPR.CREATE_BASELINE_ID(30, 50, instance_no=>'1');
      /

      파라미터 중 expiration을 입력하면 expiration이 등록된 Baseline이 생성된다. 이러한 Baseline은 생성 후 지정된 expiration만큼의 시간(hrs)이 흐른 뒤 해당 Baseline이 자동 삭제된다. 명시적으로 expiration을 지정하지 않은 경우 사용자가 직접 Baseline을 삭제하기전까지 Baseline은 삭제되지 않는다.

      exec DBMS_TPR.CREATE_BASELINE_ID(30, 50, expiration=>168);
      /