> For the complete documentation index, see [llms.txt](https://docs.tibero.com/tibero-manuals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tibero.com/tibero-manuals/7.2.6.manuals/administrator-guide/tibero-performance-repository.md).

# Tibero Performance Repository

Tibero의 성능 진단을 위해 제공되는 Tibero Performance Repository에 대해서 설명합니다.

## 개요

Tibero DBMS는 DBA가 성능 문제를 진단하도록 다양한 통계를 제공합니다. **Tibero Performance Repository(이하 TPR)**&#xB294; 통계 정보를 주기적으로 자동 수집합니다. 따라서 DBA는 별도 수집 작업을 수행할 필요가 없습니다. TPR은 수집한 통계를 분석하는 리포트 출력 기능을 제공하여 시스템 부하 분석을 지원합니다.

TPR은 다음의 주요 기능을 수행합니다.

**스냅샷 저장 기능**

스냅샷 저장 기능은 \_vt\_jcntstat, v$system\_event, v$sqlstats, v$sgastat 등 Tibero의 성능 통계 정보를 주기적으로 테이블에 저장합니다. 기본 주기는 1시간입니다. 이렇게 저장한 정보를 스냅샷이라고 합니다. 스냅샷 정보를 이용해 성능 분석 리포트를 생성할 수 있습니다. DBA는 특정 구간을 지정해 리포트를 생성하고 DB 성능 문제를 진단할 수 있습니다.<br>

**세션 상태 저장 기능**

세션 상태 저장 기능은 1초에 한 번씩 RUNNING 상태인 세션의 ID와 대기 이벤트 정보를 메모리에 저장합니다. 저장한 정보는 v$active\_session\_history 뷰에서 조회할 수 있습니다. 이 뷰를 이용해 DB 성능 문제를 더 세밀하게 진단할 수 있습니다. 단, 세션 상태 저장 기능은 부하 상황에 취약할 수 있습니다. 환경에 따라 주기를 늘리는 것을 권장합니다.

## **TPR** 사용법

### **tip** 설정

스냅샷 저장 기능을 사용하려면 tip 파일에서 'TIBERO\_PERFORMANCE\_REPOSITORY=Y'로 설정합니다. 세션 상태 저장 기능을 사용하려면 'ACTIVE\_SESSION\_HISTORY=Y'로 설정합니다. 대부분의 경우 이 설정이면 충분합니다. 이때 TOTAL\_SHM\_SIZE는 2GB를 초과하도록 설정해야 합니다.

추가 설정에는 다음 파라미터를 조정합니다.

| 파라미터                                         | 설명                                              |
| -------------------------------------------- | ----------------------------------------------- |
| TIBERO\_PERFORMANCE\_REPOSITORY              | 'Y'로 설정하면 스냅샷 저장 기능 활성화 (기본값: Y)                |
| TPR\_SNAPSHOT\_SAMPLING\_INTERVAL            | 스냅샷 추출 주기 설정 (기본값: 60, 단위: 분)                   |
| TPR\_SNAPSHOT\_RETENTION                     | 스냅샷의 최대 저장 기간 설정 (기본값: 7, 단위: 일)                |
| TPR\_SNAPSHOT\_TOP\_SQL\_CNT                 | 리포트에 출력할 상위 SQL 개수 설정 (기본값: 10, 단위: 개)          |
| 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, 단위: 초)                  |

### 관련 테이블과 뷰

저장한 스냅샷과 세션 상태는 관련 테이블과 뷰를 통해 확인할 수 있습니다. 7일이 지난 스냅샷과 세션 상태는 테이블에서 삭제됩니다.

* 스냅샷 저장 기능

<table><thead><tr><th width="305">테이블 이름</th><th>설명</th></tr></thead><tbody><tr><td>_TPR_SNAPSHOT</td><td>저장된 스냅샷의 ID와 시간에 관한 정보를 관리</td></tr><tr><td>_TPR_BASELINE</td><td>등록된 Baseline의 정보를 관리</td></tr><tr><td>_TPR_ACTIVE_SESSION_HISTORY</td><td>저장된 ASH Sample 정보를 관리</td></tr><tr><td>_TPR_METRIC</td><td>저장된 TPR Metric 정보를 관리</td></tr><tr><td>_TPR_JCNTSTAT</td><td>_VT_JCNTSTAT 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_SQLSTATS</td><td>V$SQLSTATS 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_SQL_PLAN</td><td>V$SQL_PLAN 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_SQL_PLAN_STAT</td><td>V$SQL_PLAN_STATISTICS 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_LATCH</td><td>V$LATCH 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_SYSTEM_EVENT</td><td>V$SYSTEM_EVENT 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_WAITSTAT</td><td>V$WAITSTAT 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_SGASTAT</td><td>V$SGASTAT 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_PGASTAT</td><td>V$PGASTAT 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_LIBRARYCACHE</td><td>V$LIBRARYCACHE 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_SQLTEXT</td><td>V$SQLTEXT 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_FILESTAT</td><td>V$FILESTAT 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_SEGMENTSTAT</td><td>V$SEGMENT_STATISTICS 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_TEMPSEG_OP_USAGE</td><td>V$TEMPSEG_OP_USAGE 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_PROCESS</td><td>V$PROCESS 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_SESSION</td><td>V$SESSION 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_WAITER_SESSION</td><td>V$WAITER_SESSION 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_UNDOSTAT</td><td>V$UNDOSTAT 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_OSSTAT2</td><td>V$OSSTAT2 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_SQLWA_HIST</td><td>V$SQLWA_HIST 뷰의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_MODIFIED_PARAM</td><td>_VT_PARAMETER 테이블의 스냅샷 정보를 관리</td></tr><tr><td>_TPR_MISC</td><td>세션 수와 같은 기타 정보를 스냅샷으로 관리</td></tr></tbody></table>

다음은 저장된 스냅샷의 ID와 시간 정보를 관리하는 '\_TPR\_SNAPSHOT' 테이블입니다.

```
TABLE '_TPR_SNAPSHOT'
-------------------------------------------------------------
COLUMN_NAME           TYPE           CONSTRAINT
-------------------------------------------------------------
SNAP_ID               NUMBER
THREAD#               NUMBER
INSTANCE_NUMBER       NUMBER
BEGIN_INTERVAL_TIME   DATE
END_INTERVAL_TIME     DATE
SNAP_GID              NUMBER
MARKED_FOR_REPORT     VARCHAR(1)
```

* 세션 상태 저장 기능

세션 상태 저장 주기에 활동 중인 세션들의 정보를 저장합니다.

<table><thead><tr><th width="312">테이블</th><th>설명</th></tr></thead><tbody><tr><td>_TPR_ACTIVE_SESSION_HISTORY</td><td>활동 중인 세션 상태 정보를 관리</td></tr><tr><td>V$ACTIVE_SESSION_HISTORY</td><td>최근 1시간 동안의 세션 상태 정보를 관리</td></tr></tbody></table>

다음은 최근 1시간 동안의 세션 상태 정보를 관리하는 'V$ACTIVE\_SESSION\_HISTORY' 뷰입니다.

```
VIEW 'V$ACTIVE_SESSION_HISTORY'
-------------------------------------------------------------
COLUMN_NAME               TYPE            CONSTRAINT
-------------------------------------------------------------
SAMPLE_ID                 NUMBER
THREAD#                   NUMBER
SAMPLE_TIME               DATE
SID                       NUMBER
SESS_SERIAL_NO            NUMBER
USER_NO                   NUMBER
USER_NAME                 VARCHAR(128)
IPADDR                    VARCHAR(46)
WAIT_EVENT                NUMBER
ID1                       NUMBER
ID2                       NUMBER
WE_SEQ                    NUMBER
TIME_WAITED               NUMBER
WAIT_OBJ_ID               NUMBER
WAIT_FILE_NO              NUMBER
WAIT_BLOCK_NO             NUMBER
WAIT_ROW_NO               NUMBER
USGMT_ID                  NUMBER
SLOTNO                    NUMBER
WRAPNO                    NUMBER
SQL_ID                    VARCHAR(13)
SQL_CHILD_NUMBER          NUMBER
SUB_SQL_ID                VARCHAR(13)
SUB_CHILD_NUMBER          NUMBER
CURR_HASHVAL              NUMBER
MODULE_NAME               VARCHAR(64)
ACTION_NAME               VARCHAR(64)
CLIENT_INFO_NAME          VARCHAR(64)
PROG_NAME                 VARCHAR(30)
SQL_EXEC_START            DATE
SQL_EXEC_ID               NUMBER
SQL_PLAN_LINE_ID          NUMBER
PORT                      NUMBER
DELTA_TIME                NUMBER
DELTA_PHY_READ_BLKS       NUMBER
DELTA_LOG_READ_BLKS       NUMBER
PGA_SIZE                  NUMBER
```

### 수동 스냅샷 생성 기능

TPR을 설정하면 정해진 주기에 자동으로 스냅샷이 생성되지만 원하는 경우 현재 시점의 스냅샷을 남길 수 있습니다.

```
SQL> exec dbms_tpr.create_snapshot();
```

### 리포트 작성 기능

저장된 스냅샷과 세션 상태는 테이블과 뷰에서 직접 이용할 수 있습니다. 일반적으로는 이를 이용해 성능 분석 리포트를 생성합니다. 저장된 스냅샷 정보를 분석하는 성능 분석 리포트 기능은 구현되어 있습니다. 그러나 저장된 세션 상태 정보를 분석하는 성능 분석 리포트 기능은 구현되어 있지 않습니다.

#### **스냅샷을 이용한 성능 분석 리포트 작성**

\_TPR\_SNAPSHOT 테이블을 조회하여 원하는 기간에 대한 시작, 종료 시각을 확인합니다.

다음은 원하는 기간의 시작과 종료 시점을 각각 begin\_date, end\_date로 설정한 경우입니다. tbsql에서 다음과 같이 입력해 성능 분석 리포트를 작성합니다. \_TPR\_SNAPSHOT 테이블의 BEGIN\_INTERVAL\_TIME이 begin\_date와 end\_date 사이에 포함된 모든 스냅샷이 리포트에 출력됩니다.

```
/* exec dbms_tpr.report_text(begin_date, end_date) */
```

```
SQL> exec dbms_tpr.report_text('2013-01-01 13:00:00', '2013-01-01 14:59:00');
```

성능 분석 리포트는 다음 경로에 파일로 생성됩니다.

```
$TB_HOME/instance/$TB_SID/dump/report/tpr_report.{mthr_pid}.{current_time}
```

#### **성능 분석 항목**

다음은 성능 분석 항목에 대한 설명입니다.

* Overview Part
  * System Overview
    * CPU Usage
    * Memory Usage
* Workload Overview
  * Workload Summary
  * Workload Stats
* Instance Overview
  * Instance Efficiency
  * TAC Statistics Overview (Cluster Cache Activity, Cluster Buffer Cache, Cluster Cache and Wait Lock Statistics)
  * Top 5 Wait Events by Wait Time
  * I/O Overview
* SQL Overview
  * PGA Work Area Statistics
  * Top 3 SQL Ordered by Elapsed Time
  * Top 3 SQL Ordered by Executions
  * Top 3 SQL Ordered by Gets
* Detail Part
  * System Detail
    * OS Statistics
    * Shared Pool Statistics
    * Physical Plan Cache Statistics
    * Data Dictionary Cache Statistics
    * PGA Statistics
  * Workload Detail
    * Workload Stats (Time-based)
    * Workload Stats (Number-based)
    * Workload Stats (Size-based)
  * Instance Detail
    * Buffer Cache Statistics
    * Wait Event Summary (by Class)
    * Wait Events by Wait Time
    * Session Status with Wait Event
    * Blocking Session Status with Wait Event
    * Wlock Statistics
    * Spinlock(Latch) Statistics
    * Spinlock(Latch) Sleep Statistics
    * Tablespace I/O Statistics
    * File I/O Statistics
    * Temp Segment Usage Statistics
    * Segments Ordered by Physical Reads ("TPR\_SEGMENT\_STATISTICS=Y"로 설정할 경우)
    * Segments Ordered by Logical Reads ("TPR\_SEGMENT\_STATISTICS=Y"로 설정할 경우)
    * Segments Ordered by ITL Waits ("TPR\_SEGMENT\_STATISTICS=Y"로 설정할 경우)
    * Segments Ordered by Buffer Busy Waits ("TPR\_SEGMENT\_STATISTICS=Y"로 설정할 경우)
    * Segments Ordered by Row Lock Waits ("TPR\_SEGMENT\_STATISTICS=Y"로 설정할 경우)
    * Undo Statistics
    * Wait Statistics ("\_DB\_BLOCK\_PIN\_WAIT\_USE\_STAT=Y"로 설정할 경우)
* SQL Detail
  * PGA Summary
  * PGA Work Area Histogram
  * SQL Ordered by Elapsed Time (with Physical Plan)
  * SQL Ordered by Elapsed Time/Execution (with Physical Plan)
  * SQL Ordered by Executions (with Physical Plan)
  * SQL Ordered by Gets (with Physical Plan)
  * SQL Ordered by Reads (with Physical Plan)
  * SQL Ordered by Extra I/O (with Physical Plan)
  * SQL Ordered by CPU (with Physical Plan)
* Etc
  * Tibero Init. Parameters (.tip)
  * Modified Parameters
