Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

DBDBDEEP

TPR(Tibero Performance Repository) 본문

Tibero 이론

TPR(Tibero Performance Repository)

Kihwane 2022. 11. 16. 14:53

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 테이블 조회

 

위의 정보들이 47,48의 스냅샷 정보를 저장중.

 

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