DBDBDEEP
TPR(Tibero Performance Repository) 본문
Client를 통해서 요청이 들어오게 되면 Tibero 내부의 각각의 모듈 (SQL, DATA/Transaction, Cache/Cluster) 모듈은 각각의 작업을 수행하게 된다.Patches applied
TPR (APM)은 성능 진단을 위한 통계정보를 자동으로 주기적 수집을 하고 가공을 하여 Report 형식으로 Tibero 사용자가 이용할 수 있도록 제공을 한다.
분석 Report 에서 제공하는 내용
● 각 기능/모듈별 수행 빈도와 시간
● Contention 지표 (wait event, 스핀락/w락)
● 내부 기능의 효율성 (hit ratio / efficiency)
● I/O, Interconnect 성능 (I/O stat)
● 메모리 사용량 (SGA, PGA)
● SQL
...
기능
1. 스냅샷 저장
- 스냅샷 저장 기능을 사용하려면 TIP 파일에 TIBERO_PE
- _vt_jcntstat, v$system_event, v$sqlstats, v$sgastat 등 Tibero의 각종 성능 통계 정보를 보통 1시간 간격으로 변경 분에 대하여 테이블에 저장 (스냅샷) 하여 둔다.
- 리포트를 작성하려면 저장된 스냅샷 데이터가 존재해야 한다.
- DBA는 특정 구간을 지정하여 리포트를 생성하고 이를 이용해 DB의 성능 문제를 진단한다.
- 2 - 3에 스냅샷을 찍게 되면 snap_id=11 같은 형식으로 id가 저장이 되게 된다.
- 스냅샷을 새로 찍게 되면 새로운 스냅샷은 이전의 스냅샷과의 차이가 저장되게 된다.
● Snapshot 수동 생성
- dbms_tpr.create_snapshot()
ㄴ-> 수동으로 생성하는 경우는 특별한 부하를 발생시키는 경우이다. (새로운 업무를 추가하며 부하테스트를 할 경우)
ㄴ-> 부하 구간을 정확히 나눌 필요가 있다. ex) 부하가 발생하는 그 시점의 쿼리를 뽑아서 리포트를 만드는 경우
dbms_tpr.create_snapshot() > 부하구간 > dbms_tpr.create_snapshot()
2. 리포트 작성
- _TPR_SNAPSHOT 테이블을 조회하여 성능분석을 원하는 기간에 존재하는 스냅샷에 대한 시작, 종료, 시각을 확인한다.
- dbms_tpr.report_text 등의 프로시저를 실행하여 리포트를 생성
SnapShot 확인
SQL> select host_name from v$instance;
HOST_NAME
---------------------------------------------------------------
T1
1 row selected.
SQL> select * from _tpr_snapshot order by end_interval_time;
SNAP_ID THREAD# INSTANCE_NUMBER BEGIN_INTERVAL_TIME END_INTERVAL_TIME SNAP_GID MARKED_FOR_REPORT
---------- ---------- --------------- ------------------------------ ------------------------------ ---------- -----------------
46 0 0 2019/02/18 14:01:38 2019/02/18 15:01:38 N
1 row selected.
T1 SNAP_ID : 46
BEGIN_INTERVAL_TIME : 2019/02/18 14:01:38
END_INTERVAL_TIME : 2019/02/18 15:01:38
주기는 1시간으로 설정되어 있는 것으로 확인된다.
스냅샷 찍기
SQL> exec dbms_tpr.create_snapshot;
PSM completed.
만약 TAC 라고 한다면
exec dbms_tpr.create_snapshot_all;
명령을 실행하게 되면 된다.
SQL> select * from _tpr_snapshot order by BEGIN_INTERVAL_TIME;
SNAP_ID THREAD# INSTANCE_NUMBER BEGIN_INTERVAL_TIME END_INTERVAL_TIME SNAP_GID MARKED_FOR_REPORT
---------- ---------- --------------- ------------------------------ ------------------------------ ---------- -----------------
47 0 0 2022/11/16 10:52:36 2022/11/16 11:28:18 N
기존 스냅샷이 사라지고 새로 찍은 것이 출력되게 된다.
스냅샷을 한번 더 찍어서 2개를 만들어 본다.
SQL> exec dbms_tpr.create_snapshot;
PSM completed.
SQL> select * from _tpr_snapshot order by BEGIN_INTERVAL_TIME;
SNAP_ID THREAD# INSTANCE_NUMBER BEGIN_INTERVAL_TIME END_INTERVAL_TIME SNAP_GID MARKED_FOR_REPORT
---------- ---------- --------------- ------------------------------ ------------------------------ ---------- -----------------
47 0 0 2022/11/16 10:52:36 2022/11/16 11:28:18 N
48 0 0 2022/11/16 11:28:18 2022/11/16 11:34:10 N
47번 스냅샷의 Begin_Interval_time 은 티베로를 시작하면서 적힌 시간(10:52)이다.
스냅샷을 찍으면서 Eng_interval_time이 11:28:18 되었다. 36분 가량의 정보가 47번 스냅샷에 저장되어 있다.
TPR 테이블 조회
Report 만들기
SQL> exec dbms_tpr.report_text_id(48);
PSM completed.
SQL> exec dbms_tpr.report_text_id(47);
PSM completed.
만약 47번부터 48번까지 만들고 싶다면??
SQL> exec dbms_tpr.report_text_id(47,48);
TPR 리포트 확인
[tibero@T1:/home/tibero]$ cd $TB_HOME/instance/$TB_SID/
[tibero@T1:/tibero/examples/tibero6/instance/tibero]$ ls -l
total 384
drwxr-xr-x 4 tibero dba 29 Jan 4 2019 dump
drwxr-xr-x 2 tibero dba 45 Jan 4 2019 log
drwxr-xr-x 2 tibero dba 162 Nov 16 10:52 path
-rw-r--r-- 1 tibero dba 141721 Nov 16 11:43 tpr_report.tibero.20221116_114304.txt
-rw-r--r-- 1 tibero dba 246449 Nov 16 11:43 tpr_report.tibero.20221116_114353.txt
이렇게 분석대상 DB의 대한 간략한 정보가 나오게 된다.
항목 | 설명 |
DB NAME | 데이터베이의 이름이다. |
TAC | TAC 사용여부 |
TSC | TSC 사용여부 |
Instance Cnt | TAC를 구성하는 인스턴스 개수 |
Release | 티베로 버전 |
Patches applied | 적용되어있는 패치목록 |
HOST CPUs | 호스트 머신의 CPU 정보 |
Interval condition | 입력한 TRP 리포트를 생성하는 조건 |
Report Snapshot Range | 입력한 조건에 해당하는 스냅샷의 실제 기록된 시간 범위이다 |
Report Instance Cnt | 리포트에 포함된 인스턴스의 개수이다. (from Instance No.)는 인스턴스를 지정했는지 여부를 나타내며 기본값은 'ALL'이다. |
Elapsed Time | 리포트에 출력되는 스냅샷의 시작 시간부터 종료 시간까지의 경과 시간이다 |
DB Time | 실제 DB가 일한 시간이다. (단위: 분) 모든 WTHR의 수행 시간이 더해지기 때문에 동시에 많은 세션이 일하게 되 면 실제 경과 시간인 Elapsed Time보다 많이 나온다. |
Avg. Session # | 해당 구간의 스냅샷들의 평균 세션 개수이다. (단, 스냅샷을 남길 때 세션 개 수의 평균이기 때문에 다소 부정확할 수 있다) |
TPR 리포트에 대한 영역 설명은 Tibero TPR_GUIDE를 참고하고 본다.
*Insert 부하*
EXEC DBMS_TPR.CREATE_SNAPSHOT;
----------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL> CREATE TABLE TIBERO.T1(c1 number, c2 char(2000));
SQL> INSERT INTO TIBERO.T1
SELECT LEVEL, SYSDATE FROM DUAL
CONNECT BY LEVEL <= 100000;
SQL> COMMIT;
----------------------------------------------------------------------------------------------------------------------------------------------------------------
EXEC DBMS_TPR.CREATE_SNAPSHOT;
EXEC DBMS_TPR.REPORT_TEXT_LAST();
새로운 리포트가 만들어졌다.
위의 것보다 아래의 것이 CPU 사용률이 높다. 10만건의 INSERT를 진행함으로서 달라진 것을 볼 수 있다.
4.2 SQL Ordered by Elapsed Time
================================================================================
=== SQL #1 ===
Overall Stats
=============
Elapsed Execution Time DB SQL Plan
Time(s) Count /Exec(s) Time(%) Hash Value Hash Value Module
-------------- -------------- ------------ ---------- ---------- ---------- --------------------
6.85 1 6.85 96.54 825869689 928647022 tbsql@T1
SQL Text
========
INSERT INTO TIBERO.T1 SELECT LEVEL, SYSDATE FROM DUAL
CONNECT BY LEVEL <= 100000
4.2 파트를 보면 Elapsed Time(s)에 따라 실행시간이 길었던 SQL문장을 볼 수 있다.
7.7 파트
w lock : 동시에 업데이트를 할 때 대기하는 락.
spin lock : 메모리 상에서 대기할 때 발생하는 락. OS부분에 대한 것
'Tibero 이론' 카테고리의 다른 글
Tibero Monitoring (tm 사용) (0) | 2022.11.15 |
---|---|
Tibero Admin 과정 중 몰랐던 것들 (1) | 2022.11.02 |
Partitioning (0) | 2022.11.01 |
Tibero DB구성 (HA, TAC, TAS, TSC, TBCM..) (0) | 2022.10.28 |
Tibero 구조 (0) | 2022.10.28 |