[TIBERO] TPR 분석

반응형

1. Tip 파일 설정 parameter 

 

TIBERO_PERFORMANCE_REPOSITORY 'Y'로 설정하면 스냅샷 저장 기능 활성화한다. (기본값: Y)
TPR_SNAPSHOT_SAMPLING_INTERVAL 스냅샷을 추출하는 주기를 설정한다. (기본값: 60, 단위: 분)
TPR_SNAPSHOT_RETENTION 스냅샷을 최대 저장할 기간을 설정한다. (기본값: 7, 단위: 일)
TPR_SNAPSHOT_TOP_SQL_CNT 리포트에 출력할 상위 SQL 개수를 설정한다. (기본값: 5, 단위: 개)
TPR_SEGMENT_STATISTICS 'Y'로 설정하면 TPR에서 Segment별 Stat 수집 기능을 활성화한다. (기본값: N)
TPR_SNAPSHOT_TOP_SEGMENT_CNT 리포트에 출력할 상위 Segment 개수를 설정한다.
(기본값: 5, 단위: 개)
TPR_METRIC 'Y'로 설정하면 TPR METRIC 기능을 활성화한다. (기본값: N)
TPR_AGGREGATION 'Y'로 설정하면 TPR AGGREGATION 기능을 활성화한다.
(기본값: N)
ACTIVE_SESSION_HISTORY 'Y'로 설정하면 세션 상태 저장 기능 활성화한다. (기본값: N)
_ACTIVE_SESSION_HISTORY_SAMPLING_INTERVAL 세션 상태 저장 주기를 설정한다. (기본값: 1초, 단위: 초)

 

2. TPR 관련 저장 View

_TPR_SNAPSHOT 저장된 스냅샷의 ID와 시간에 관한 정보를 관리하는 테이블이다.
_TPR_BASELINE 등록된 Baseline의 정보를 관리하는 테이블이다.
_TPR_ACTIVE_SESSION_HISTORY 저장된 ASH Sample 정보를 관리하는 테이블이다.
_TPR_METRIC 저장된 TPR Metric 정보를 관리하는 테이블이다.
_TPR_JCNTSTAT _VT_JCNTSTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_SQLSTATS V$SQLSTATS 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_SQL_PLAN V$SQL_PLAN 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_SQL_PLAN_STAT V$SQL_PLAN_STATISTICS 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_LATCH V$LATCH 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_SYSTEM_EVENT V$SYSTEM_EVENT 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_WAITSTAT V$WAITSTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_SGASTAT V$SGASTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_PGASTAT V$PGASTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_LIBRARYCACHE V$LIBRARYCACHE 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_SQLTEXT V$SQLTEXT 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_FILESTAT V$FILESTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_SEGMENTSTAT V$SEGMENT_STATISTICS 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_TEMPSEG_OP_USAGE V$TEMPSEG_OP_USAGE 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_PROCESS V$PROCESS 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_SESSION V$SESSION 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_WAITER_SESSION V$WAITER_SESSION 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_UNDOSTAT V$UNDOSTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_OSSTAT2 V$OSSTAT2 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_SQLWA_HIST V$SQLWA_HIST 뷰의 스냅샷 정보를 관리하는 테이블이다.
_TPR_MODIFIED_PARAM _VT_PARAMETER 테이블의 스냅샷 정보를 관리하는 테이블이다.
_TPR_MISC 세션 수와 같은 기타 정보의 스냅샷 정보를 관리하는 테이블이다.

 

 3. Snapshot 조회

select snap_id,to_char(BEGIN_INTERVAL_TIME, 'yyyy/mm/dd HH:MI:SS')  begin1, to_char(END_INTERVAL_TIME,'yyyy/mm/dd HH:MI:SS') end1 from _TPR_SNAPSHOT;
 
select snap_id,to_char(BEGIN_INTERVAL_TIME, 'yyyy/mm/dd HH:MI:SS') , to_char(END_INTERVAL_TIME,'yyyy/mm/dd HH:MI:SS')
from V$TPR_SNAPSHOT;

 

4. Snapshot 추출

alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
스냅샷
exec DBMS_TPR.CREATE_SNAPSHOT_ALL();
exec DBMS_TPR.CREATE_SNAPSHOT();
 
확인
select to_char(BEGIN_INTERVAL_TIME, 'yyyy/mm/dd HH:MI') , to_char(END_INTERVAL_TIME,'yyyy/mm/dd HH:MI')
from _TPR_SNAPSHOT;
 
 
특정시간 추출
 
아래의 예제는 1월 1일 00:00부터 2월 1일 23:59:59 사이에 월,수,금 오전 9시부터 오후 6시까지에 해당하는 스냅샷에 대한 리포트 생성을 하는 예제이다.
 
 
exec dbms_tpr.report_text('2016-04-08 15:30:00', '2016-04-08 16:40:00');
 
 
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');

#html로 추출
exec DBMS_TPR.REPORT_HTML_ID(31811, 31843);

마지막시간
마지막으로 찍힌 Snapshot 으로 TPR을 추출한다.
exec DBMS_TPR.REPORT_TEXT_LAST();
조회해서 SNAPSHOT ID로 TPR 분석
exec DBMS_TPR.REPORT_TEXT_ID(1, 5);
Tibero5 는 명령어 다름
exec DBMS_TPR.CREATE_BASELINE_ID(30, 50);

 


# TPR 분석

 

8. SQL Statistics
-. Case 별 Top sql 분석

8.1 SQL Ordered by Elapsed Time

-. Elapsed Time기준으로 DB Time의 40%가 넘는 쿼리지만 1회당 수행시간이 짧아서 문제 없어 보인다.

-. 하지만 해당 시점에 CPU가 높다면 전반적으로 모든 쿼리의 Elapsed Time이 급격하게 증가한다.

-. 즉 DB Time(%)로 판단하면 안된다.

 

8.2 SQL Ordered by Elapsed Time per Execution

 -. 자주 실행되는 Execution을 통해 확인하고, DB전체의 Elapsed Time은 작더라도 Time/Exec(s)이 과도하게 큰지 확인한다.

 

8.3 SQL Ordered by Executions

 -. Execution Count가 높은 순으로 출력된것이다.
 -. 호출이 많은 SQL에 문제가 없는지 확인한다.

 

8.4 SQL Ordered by Gets

 -. 과도하게 Buffer I/O를 발생시키는 쿼리를 확인한다.
 -. 이 경우 통계정보가 잘못됫을 수도 있다. 잘못된 통계정보 삭제 후 현상을 해소한 경우도 있다.

 

8.5 SQL Order by Read

 -. Disk Read Time이 과도하게 높게 발생시키는 쿼리 확인

 

8.6 SQL Ordered by Extra I/O

 -. Temp Segment I/O Time(s)을 과도하게 쓰고 자주발생하는 쿼리인지 확인

 

8.7 SQL Ordered by CPU

 -. CPU를 많이 잡아먹는 쿼리 확인

 


-. 순간적인 성능저하

-. 가끔 발생하는 SQL문 성능 저하

-. 비교 대상이 없는 리포트

-. 리포트 구간이 정확하지 않는 경우

위의 경우에는 SQL문 이외에도 다른 parameter의 영향이나 OS 적인 영향도 확인 해야하는데 어려움이 있다.

 

 

반응형