본 장에서는 Tibero의 성능 진단을 위해서 제공되는 APM에 대해서 설명한다.
Tibero DBMS는 DBA가 성능 문제를 진단하는데 도움을 주기 위해 다양한 종류의 통계를 제공하고 있다. Automatic Performance Monitoring(이하 APM)은 이러한 통계 정보를 주기적으로 자동 수집하여 DBA가 이를 위한 작업을 따로 할 필요가 없어졌고 수집한 통계 자료에 대한 자체적인 분석 리포트 출력 기능을 제공하여 시스템 부하 분석에 도움을 줄 수 있는 기능이다.
APM은 다음의 주요 기능를 수행한다.
스냅샷 저장 기능
스냅샷 저장 기능은 v$sysstat, v$system_event, v$sqlstats, v$sgastat 등 Tibero의 각종 성능 통계 정보를 주기적(보통 1시간)으로 테이블에 저장하여 둔다. 이렇게 저장된 정보를 스냅샷이라 부른다. 이렇게 저장해 놓은 스냅샷 정보를 이용하여 성능 분석 리포트를 만드는 기능을 제공한다. DBA는 특정 구간을 지정하여 리포트를 생성하고 이를 이용해 DB의 성능 문제를 진단할 수 있다.
세션 상태 저장 기능
세션 상태 저장 기능은 1초에 한번씩 현재 RUNNING 상태인 세션들의 ID와 대기 중인 이벤트 정보를 메모리에 저장해 둔다. 이렇게 저장해 놓은 정보는 v$active_session_history 뷰로 조회할 수 있다. 이 뷰를 이용해 DB의 성능 문제를 보다 세밀하게 진단할 수 있다. 단, 현재 세션 상태 저장 기능은 부하 상황에 취약할 수 있으므로 환경에 따라 주기를 더 늘리기를 권장한다.
스냅샷 저장 기능을 사용하려면 tip 파일에 'AUTOMATIC_PERFORMANCE_MONITORING=Y'로 설정하고, 세션 상태 저장 기능을 사용하려면 'ACTIVE_SESSION_HISTORY=Y'로 설정하면 된다. 대부분의 경우 이 정도면 충분하다. 그 밖의 설정을 하기 위해서는 다음과 같은 파라미터를 조절하면 된다.
파라미터 | 설명 |
---|---|
AUTOMATIC_PERFORMANCE_MONITORING | 'Y'로 설정하면 스냅샷 저장 기능 활성화한다. (기본값: Y) |
APM_SNAPSHOT_SAMPLING_INTERVAL | 스냅샷을 추출하는 주기를 설정한다. (기본값: 60, 단위: 분) |
APM_SNAPSHOT_RETENTION | 스냅샷을 최대 저장할 기간을 설정한다. (기본값: 7, 단위: 일) |
APM_SNAPSHOT_TOP_SQL_CNT | 리포트에 출력할 상위 SQL 개수를 설정한다. (기본값: 5, 단위: 개) |
APM_SEGMENT_STATISTICS | 'Y'로 설정하면 APM에서 Segment별 Stat 수집 기능을 활성화한다. (기본값: N) |
APM_SNAPSHOT_TOP_SEGMENT_CNT | 리포트에 출력할 상위 Segment 개수를 설정한다. (기본값: 5, 단위: 개) |
APM_METRIC | 'Y'로 설정하면 APM METRIC 기능을 활성화한다. (기본값: N) |
ACTIVE_SESSION_HISTORY | 'Y'로 설정하면 세션 상태 저장 기능 활성화한다. (기본값: N) |
_ACTIVE_SESSION_HISTORY_SAMPLING_INTERVAL | 세션 상태 저장 주기를 설정한다. (기본값: 1초, 단위: 초) |
저장한 스냅샷과 세션 상태는 관련 테이블과 뷰를 통해 확인할 수 있다. 7일이 지난 스냅샷과 세션 상태는 테이블에서 삭제된다.
스냅샷 저장 기능
테이블 | 설명 |
---|---|
_APM_SNAPSHOT | 저장된 스냅샷의 ID와 시간에 관한 정보를 관리하는 테이블이다. |
_APM_ACTIVE_SESSION_HISTORY | 저장된 ASH Sample 정보를 관리하는 테이블이다. |
_APM_SYSSTAT | V$SYSSTAT 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_SQLSTATS | V$SQLSTATS 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_SQL_PLAN | V$SQL_PLAN 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_SQL_PLAN_STAT | V$SQL_PLAN_STATISTICS 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_LATCH | V$LATCH 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_SYSTEM_EVENT | V$SYSTEM_EVENT 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_WAITSTAT | V$WAITSTAT 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_SGASTAT | V$SGASTAT 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_PGASTAT | V$PGASTAT 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_LIBRARYCACHE | V$LIBRARYCACHE 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_SQLTEXT | V$SQLTEXT 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_FILESTAT | V$FILESTAT 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_SEGMENTSTAT | V$SEGMENT_STATISTICS 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_TEMPSEG_OP_USAGE | V$TEMPSEG_OP_USAGE 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_PROCESS | V$PROCESS 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_SESSION | V$SESSION 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_WAITER_SESSION | V$WAITER_SESSION 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_UNDOSTAT | V$UNDOSTAT 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_OSSTAT2 | V$OSSTAT2 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_SQLWA_HIST | V$SQLWA_HIST 뷰의 스냅샷 정보를 관리하는 테이블이다. |
_APM_MODIFIED_PARAM | _VT_PARAMETER 테이블의 스냅샷 정보를 관리하는 테이블이다. |
_APM_MISC | 세션 수와 같은 기타 정보의 스냅샷 정보를 관리하는 테이블이다. |
다음은 저장된 스냅샷의 ID와 시간에 관한 정보를 관리하는 '_APM_SNAPSHOT' 테이블 정보이다.
TABLE '_APM_SNAPSHOT' ------------------------------------------------------------- COLUMN_NAME TYPE CONSTRAINT --------------------------------- ---------------- ---------- SNAP_ID NUMBER THREAD# NUMBER INSTANCE_NUMBER NUMBER BEGIN_INTERVAL_TIME DATE END_INTERVAL_TIME DATE
세션 상태 저장 기능
세션 상태 저장 주기에 활동 중인 세션들의 정보를 저장한다.
테이블 | 설명 |
---|---|
_APM_ACTIVE_SESSION_HISTORY | 활동 중인 세션 상태 정보를 관리하는 테이블이다. |
V$ACTIVE_SESSION_HISTORY | 최근 1시간 동안의 세션 상태 정보를 관리하는 테이블이다. |
다음은 최근 1시간 동안의 세션 상태 정보를 관리하는 'V$ACTIVE_SESSION_HISTORY' 테이블 정보이다.
VIEW 'V$ACTIVE_SESSION_HISTORY' ---------------------------------------------------------- COLUMN_NAME TYPE CONSTRAINT ------------------------------- -------------- ----------- SAMPLE_ID NUMBER SAMPLE_TIME DATE SID NUMBER SESS_SERIAL_NO NUMBER USER_NO NUMBER WAIT_EVENT NUMBER TIME_WAITED NUMBER SQL_ID NUMBER CURR_HASHVAL NUMBER MODULE_NAME VARCHAR(64) ACTION_NAME VARCHAR(64) CLIENT_INFO_NAME VARCHAR(64) PROG_NAME VARCHAR(30)
APM을 설정하면 정해진 주기에 자동으로 스냅샷이 생성되지만 원하는 경우 현재 시점의 스냅샷을 남길 수 있다.
SQL> exec dbms_apm.create_snapshot();
저장된 스냅샷과 세션 상태는 테이블과 뷰를 통해 직접 이용할 수도 있지만 보통은 이를 이용해 성능 분석 리포트를 만들게 된다. 현재 저장된 스냅샷 정보를 분석해 성능 분석 리포트를 만드는 기능은 구현되어 있다. 그러나 저장된 세션 상태 정보를 분석해 성능 분석 리포트를 만드는 기능은 구현되어 있지 않다.
_APM_SNAPSHOT 테이블을 조회하여 원하는 기간에 대한 시작, 종료 시각을 확인한다.
다음은 원하는 기간의 시작과 종료 시점을 각각 begin_date, end_date라고 설정한 경우 tbsql에서 다음과 같이 입력하여 성능 분석 리포트를 작성하는 예이다. _APM_SNAPSHOT 테이블의 BEGIN_INTERVAL_TIME이 begin_date과 end_date 사이에 포함되는 모든 스냅샷들이 리포트로 출력된다.
/* exec dbms_apm.report_text(begin_date, end_date) */
SQL> exec dbms_apm.report_text('2013-01-01 13:00:00', '2013-01-01 14:59:00');
성능 분석 리포트는 다음의 경로에 파일로 생성된다.
$TB_HOME/instance/$TB_SID/apm_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