본문 바로가기

DB/Tibero

[Tibero] TPR 생성 방법 가이드

             

Tibero Guide

 

TPR 생성 방법 가이드

 

2023.08

1.   개요

본 문서는 TPR(Tibero Performance Repository) 생성을 위한 가이드 내용 입니다.

더 자세한 정보는 Tibero tbPSM 참조 안내서 제41장 DBMS_TPR을 참고하시기 바랍니다.

2.   설명

Tibero TPR은 통계 정보를 주기적으로 자동 수집하고 수집한 통계 자료에 대한 자체적인 분석 리포트 출력 기능을 제공하여 성능 문제 진단 및 시스템 부하 분석에 도움을 주는 기능이다.

2.1       주요 파라미터

파라미터 설명
TIBERO_PERFORMANCE_REPOSITORY 'Y'로 설정하면 스냅샷 저장 기능 활성화한다. (기본값: Y)
TPR_SNAPSHOT_SAMPLING_INTERVAL 스냅샷을 추출하는 주기를 설정한다. (기본값: 60, 단위: 분)
TPR_SNAPSHOT_RETENTION 스냅샷을 최대 저장할 기간을 설정한다. (기본값: 7, 단위: 일)
TPR_SNAPSHOT_TOP_SQL_CNT 리포트에 출력할 상위 SQL 개수를 설정한다. (기본값: 5, 단위: 개)

Interval 주기에 해당 시점에 스냅샷을 찍기 때문에 Interval간, 내용은 반영이 되지 않음.

Interval 주기를 너무 짧게 할 경우, 부하가 심해질수 있음.

2.2       _TPR_SNAPSHOT테이블

desc _TPR_SNAPSHOT

저장된 스냅샷의 ID와 시간에 관한 정보를 관리하는 '_TPR_SNAPSHOT' 테이블 정보이다.

 

다음은 수동으로 현재 시점의 스냅샷을 저장하는 예이다.

exec dbms_tpr.create_snapshot();

2.3       TPR 레포트 생성 방법

_TPR_SNAPSHOT 테이블에 수집된 스냅샷 정보를 이용하여 TPR 레포트를 생성한다.

생성된 TPR 레포트는 $TB_HOME/instance/$TB_SID/ 디렉토리에 저장된다.

2.3.1     REPORT_TEXT

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

파라미터 설명
begin_time 성능 분석 리포트 대상 구간 중 시작 시간이다.
end_time 성능 분석 리포트 대상 구간 중 종료 시간이다.
instance_no 성능 분석 리포트 대상 인스턴스 번호이다. (기본값: ALL)
file_name 만들어질 성능 분석 리포트 파일명이다.
(기본값: tpr_report.{db_name}.{current_time}.txt)

Ex)

alter session set NLS_DATE_FORMAT="YYYY/MM/DD HH24:MI:SS";

select sysdate from dual ;

exec dbms_tpr.report_text('2023/08/16 16:00:00', '2023/08/16 17:00:00');

수집된 스냅샷이 없는 구간을 선택할시 오류가 발생한다.

select min(begin_interval_time), max(begin_interval_time), min(end_interval_time), max(end_interval_time)
from _tpr_snapshot;

exec dbms_tpr.report_text('2023/08/15 16:00:00', '2023/08/15 17:00:00');

2.3.2     REPORT_TEXT _ID

특정 스냅샷 ID 혹은 ID 구간의 성능 분석 리포트(text)를 생성한다. 

REPORT_TEXT_ID 프러시저는 input이 특정 ID 혹은 ID 구간 두 종류로 나누어 진다.

 

a) 특정 ID

원하는 sap_id 한개의 리포트를 생성한다.

snap_id는 unique 하기 때문에, instance 한개에 대해서만 출력할 수 있다.

Ex)

exec dbms_tpr.report_text_id(1006);

b) ID 구간

원하는 snap_id 구간을 입력하여 리포트를 생성한다.

3번째 인자인 instance_no를 입력하지 않으면 입력한 snap_id에 대한BEGIN_INTERVAL_TIME 구간에 포함되는 모든 instance들의 snapshot들이 대상이 된다.

파라미터 설명
begin_snap_id 성능 분석 리포트 대상 구간 중 시작 스냅샷 ID이다.
end_snap_id 성능 분석 리포트 대상 구간 중 종료 스냅샷 ID이다.
instance_no 성능 분석 리포트 대상 인스턴스 번호이다. (기본값: ALL)
file_name 만들어질 성능 분석 리포트 파일명이다.
(기본값: tpr_report.{db_name}.{current_time}.txt)

 

Ex)

exec dbms_tpr.report_text_id (1000, 1006);

2.3.3     REPORT_TEXT _LAST

현재 _TPR_SNAPSHOT 테이블에서 마지막으로 남긴 snap_id 하나에 대해 리포트를 생성한다.

Ex)

exec dbms_tpr.report_text_last();

2.4       번외

-- 부하시점 SNAP_ID 추출하는 쿼리
select n.begin_interval_time, n.end_interval_time, o.snap_id,
sum(case when v.stat_name = 'DB_CPU_TIME' then o.value else 0 end) db_cpu_time,
sum(case when v.stat_name = 'BG_CPU_TIME' then o.value else 0 end) bg_cpu_time,
sum(case when v.stat_name = 'BUSY_TIME' then o.value else 0 end) busy_time,
sum(case when v.stat_name in ('USER_TIME', 'NICE_TIME') then o.value else 0 end) user_time,
sum(case when v.stat_name = 'SYS_TIME' then o.value else 0 end) sys_time,
sum(case when v.stat_name = 'IDLE_TIME' then o.value else 0 end) idle_time,         
sum(case when v.stat_name = 'IOWAIT_TIME' then o.value else 0 end) iowait_time
from _tpr_osstat2 o, _tpr_snapshot n, v$osstat2 v
where o.thread# = 0 -- TAC에서 1번노드는 0,  2번노드는 1로 조회할것!!!
and o.thread# = n.thread#
and o.snap_id = n.snap_id
and o.id = v.id
and v.stat_name in ('DB_CPU_TIME', 'BG_CPU_TIME', 'BUSY_TIME', 'USER_TIME','NICE_TIME', 'SYS_TIME', 'IDLE_TIME', 'IOWAIT_TIME')
group by o.snap_id, n.begin_interval_time, n.end_interval_time
order by o.db_cpu_time;