제14장 Automatic Performance Monitoring

내용 목차

14.1. 개요
14.2. APM 사용법
14.2.1. tip 설정
14.2.2. 관련 테이블과 뷰
14.2.3. 수동 스냅샷 생성 기능
14.2.4. 리포트 작성 기능

본 장에서는 Tibero의 성능 진단을 위해서 제공되는 APM에 대해서 설명한다.

14.1. 개요

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의 성능 문제를 보다 세밀하게 진단할 수 있다. 단, 현재 세션 상태 저장 기능은 부하 상황에 취약할 수 있으므로 환경에 따라 주기를 더 늘리기를 권장한다.

14.2. APM 사용법

14.2.1. tip 설정

스냅샷 저장 기능을 사용하려면 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초, 단위: 초)

14.2.2. 관련 테이블과 뷰

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

  • 스냅샷 저장 기능

    테이블설명
    _APM_SNAPSHOT저장된 스냅샷의 ID와 시간에 관한 정보를 관리하는 테이블이다.
    _APM_ACTIVE_SESSION_HISTORY저장된 ASH Sample 정보를 관리하는 테이블이다.
    _APM_SYSSTATV$SYSSTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_SQLSTATSV$SQLSTATS 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_SQL_PLANV$SQL_PLAN 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_SQL_PLAN_STATV$SQL_PLAN_STATISTICS 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_LATCHV$LATCH 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_SYSTEM_EVENTV$SYSTEM_EVENT 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_WAITSTATV$WAITSTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_SGASTATV$SGASTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_PGASTATV$PGASTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_LIBRARYCACHEV$LIBRARYCACHE 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_SQLTEXTV$SQLTEXT 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_FILESTATV$FILESTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_SEGMENTSTATV$SEGMENT_STATISTICS 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_TEMPSEG_OP_USAGEV$TEMPSEG_OP_USAGE 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_PROCESSV$PROCESS 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_SESSIONV$SESSION 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_WAITER_SESSIONV$WAITER_SESSION 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_UNDOSTATV$UNDOSTAT 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_OSSTAT2V$OSSTAT2 뷰의 스냅샷 정보를 관리하는 테이블이다.
    _APM_SQLWA_HISTV$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)

14.2.3. 수동 스냅샷 생성 기능

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

SQL> exec dbms_apm.create_snapshot();

14.2.4. 리포트 작성 기능

저장된 스냅샷과 세션 상태는 테이블과 뷰를 통해 직접 이용할 수도 있지만 보통은 이를 이용해 성능 분석 리포트를 만들게 된다. 현재 저장된 스냅샷 정보를 분석해 성능 분석 리포트를 만드는 기능은 구현되어 있다. 그러나 저장된 세션 상태 정보를 분석해 성능 분석 리포트를 만드는 기능은 구현되어 있지 않다.

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

_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