Ch2. AWR 관리

AWR 스냅샷 관리

  • DBMS_WORKLOAD_REPOSITORY PACKAGE
항목사용법
AWR 스냅샷 생성{code:sql}
BEGIN
DBMS_WORKLOAD.REPOSITORY.CREATE_SNAPSHOT
(FLUSH_LEVEL=>'flush_level');
END;
/

dbms_workload_repository.create_snapshot(
flush_level IN VARCHAR2 DEFAULT 'TYPICAL')
RETURN NUMBER;

|
|AWR 스냅샷 삭제|{code:sql}
BEGIN
    DBMS_WORKLOAD.REPOSITORY.DROP_SNAPSHOT_RANGE
    (LOW_SNAP_ID=>snap_id, HIGH_SNAP_ID=>snap_id [, DBID->dbid]);
END;
/

dbms_workload_repository.drop_snapshot_Range(
    low_snap_id  IN NUMBER,
    high_snap_id IN NUMBER
    dbid         IN NUMBER DEFAULT NULL);

|

AWR 스냅샷 설정 변겅{code:sql}
BEGIN
DBMS_WORKLOAD.REPOSITORY.MODIFY_SNAPSHOT_SETTINGS
(RETENTION=>retention_time, INTERVAL=>interval_time, TOPNSQL=>topn_sql_number);
END;
/

dbms_workload_repository.modify_snapshot_settings(
retention IN NUMBER DEFAULT NULL,
interval IN NUMBER DEFAULT NULL,
topnsql IN NUMBER DEFAULT NULL,
dbid IN NUMBER DEFAULT NULL);
dbms_workload_repository.modify_snapshot_settings(
retention IN NUMBER DEFAULT NULL,
interval IN NUMBER DEFAULT NULL,
topnsql IN VARCHAR2 DEFAULT NULL,
dbid IN NUMBER DEFAULT NULL);

|
|베이스라인 생성|{code:sql}
BEGIN
    DBMS_WORKLOAD.REPOSITORY.CREATE_BASELINE
    (START_SNAP_ID=>snap_id, END_SNAP_ID=>snap_id, BASELINE_NAME=>'baseline_name'[, DBID=>dbid]);
END;
/

dbms_workload_repository.create_baseline(
    start_snap_id IN NUMBER,
    end_snap_id   IN NUMBER,
    baseline_name IN VARCHAR2,
    dbid          IN NUMBER DEFAULT NULL)
RETURN NUMBER;

|

베이스라인 삭제{code:sql}
BEGIN
DBMS_WORKLOAD.REPOSITORY.DROP_BASELINE
(BASELINE_NAME=>'baseline_name'[, CASCADE=>true
false], DBID=>dbid);
END;
/

dbms_workload_repository.drop_baseline(
baseline_name IN VARCHAR2,
cascade IN BOOLEAN DEFAULT FALSE,
dbid IN NUMBER DEFAULT NULL);

Cascade
False : Drop baseline but not snapshots
True : Drops baseline and snapshots

|

h3. AWR 스냅샷 생성
* 원하는 시점에 awr 스냅샷을 수행 할 수 있다.
{code:sql}
-- TYPICAL 옵션으로 AWR 데이터 수집
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();

-- ALL 옵션으로 AWR 데이터 수집
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(FLUSH_LEVEL=>'ALL');


  • FLUSH_LEVEL : AWR 스냅샷 수행시 통계 수집 레벨을 설정. TYPICAL or ALL (DEFAULT 'TYPICAL')
    • STATISTICS_LEVLE 초기화 파라미터 값의 의미와 동일
      {tip}
  • STATISTICS_LEVEL 초기화 파라미터
    • 오라클 10g부터 새로 추가.
    • AWR 데이터 수집 레벨을 설정
      • TYPICAL : AWR 기본 통계 데이터 수집. 기본값
        AWR 데이터를 이용하는 대부분의 기능을 무리없이 사용.
      • ALL : AWR 기본 통계 데이터 + 추가 OS 통계 + 추가 실행 계획 통계
        추가 테이터의 검색이 가능하나 저장 공간 및 수집 부하가 늘어난다.
      • BASIC : 통계 수집하지 않음
        10g의 새로운 기능 사용 불가.
        • AWR 스냅샷 자동 수행
        • 자가 진단(Automatic Database Diagnostic Monitor, ADDM)
        • 공유 메모리 자동 관리(Automatic Shared Memory Management, ASMM)
        • 자동 옵티마이저 통계 수집
        • MTTR 권고치(MTTR Advisor)
          {tip}

SELECT SNAP_ID, INSTANCE_NUMBER,
       TO_CHAR(STARTUP_TIME, 'YYYYMMDD HH24:MI') INST_START,
       TO_CHAR(BEGIN_INTERVAL_TIME, 'YYYYMMDD HH24:MI') BEGIN,
       TO_CHAR(END_INTERVAL_TIME, 'YYYYMMDD HH24:MI') END,
       SNAP_LEVEL
FROM   DBA_HIST_SNAPSHOT
ORDER BY INSTANCE_NUMBER, SNAP_ID;

항목의미
SNAP_IDAWR 스냅샷 번호
INSTANCE_NUMBERAWR 스냅샷이 수행된 인스턴스 번호
STARTUP_TIME인스턴스가 시작된 시간
BEGIN_INTERVAL_TIME이전 스냅샷이 수행된 시간. 인스턴스가 시작된 후 처음 스냅샷이 수행되었다면 인스턴스 시작 시간
END_INTERVAL_TIMEAWR 스냅샷 수행 시간
SNAP_LEVELAWR 스냅샷 수행시 설정된 FLUSH_LEVEL(TYPICLA:1, ALL:2)
  • AWR 스냅샷 수행 시 에러정보는 DBA_HIST_SNAP_ERROR 딕셔너리로 확인 가능.

스냅샷 삭제


BEGIN
    DBMS_WORKLOAD.REPOSITORY.DROP_SNAPSHOT_RANGE
    (LOW_SNAP_ID=>1, HIGH_SNAP_ID=>10);
END;
/

옵션설명
LOW_SNAP_ID삭제하려는 AWR 스냅샷의 시작 번호
HIGH_SNAP_ID삭제하려는 AWR 스냅샷의 마지막 번호
DBID데이터베이스 ID 지정. 기본값은 NULL, 이 경우 프로시저를 수행한 데이터베이스가 선택된다

AWR 스냅샷 설정 변경

  • 기본
    • AWR 스냅샷 수행 주기 - 60분
    • AWR 스냅샷 보관 기간 - 7일
    • 항목별 수집 SQL 수 - 상위 30개

BEGIN
    DBMS_WORKLOAD.REPOSITORY.MODIFY_SNAPSHOT_SETTINGS
    (INTERVAL=>30, RETENTION=>60*24*60, TOPNSQL=>'100');
END;
/
-- 수행 주기 30분, 보관 기간 60일, 수집되는 상위 SQL수 100개로 변경
SELECT * FROM DBA_HIST_WR_CONTROL;

옵션설명
INTERVAL스냅샷 수행 주기를 분 단위로 지정. 기본값은 NULL, 이 경우 기존 설정 값이 유지, NUMBER 타입 변수
최소10분에서 최대 1년까지 지정,
0으로 설정할 경우에 AWR 스냅샷이 자동으로 수행되지 않는다.
0으로 설정한 경우 CREATE_SNAPSHOT() 프로시저를 이용한 수동 스냅샷도 수행할 수 없다.
RETENTIONAWR 스냅샷 보관 기간을 분단위로 지정. 기본값은 NULL, 이 경우 기존 설정 값이 유지, NUMBER 타입 변수
최소 1일에서 최대 100년까지 지정.
0으로 설정할 경우에 영구적으로 보존
TOPNSQLElapse 시간, CPU 사용 시간, Parse Call 횟수, Sharable Memory, Version Count의 항목에 대해 각각 수집되는 SQL문의 수를 지정.
각 항목의 크기를 내림차순 정렬해서 설정한 개수만큼 저장, NUMBER타입 및 VARCHAR2 타입 변수, 기본값은 NULL, 이 경우 기존 설정값 유지
변수타입설정 값
NUMBER최소 30개에서 최대 100,000,000개까지 지정 가능하다.
VARCHAR2DEFAULT:기본 값으로 설정된다. AWR 통계 수집 레벨이 TYPICAL인 경우 30개, ALL인 경우 100개의 SQL이 저장된다.
MAXIMUM:커서 캐시에 저장된 모든 SQL을 저장한다.
숫자:NUMBER 타입으로 지정한 것과 동일하게 사용된다.
DBID데이터베이스 ID. 기본값은 NULL, 이 경우 프로시저를 수행한 데이터베이스가 선택된다

AWR 베이스라인 생성과 삭제

  • 성능 분석시 튜닝 전후 비교나 정상 구간과 문제 구간 비교 등 여러 가지 이유로 기준 구간을 설정할 필요가 있다.
  • AWR 스냅샷에 의해 수집된 통계 수치의 비교를 위한 기준 구간을 지정하고 저장할 수 있다.
    • 베이스라인(Base Line) - AWR 수치 비교를 위해 기준 구간으로 지정하는 AWR 스냅샷 구간

BEGIN
    DBMS_WORKLOAD.REPOSITORY.CREATE_BASELINE
    (START_SNAP_ID=>2004, END_SNAP_ID=>2006, BASELINE_NAME=>'BAD_BATCH', DBID=>1134139816);
END;
/

옵션설명
START_SNAP_ID기준 값 구간으로 지정할 시작 스냅샷 ID. NUMBER 타입 변수, 기본 값은 없다.
END_SNAP_ID기준 값 구간으로 지정할 종료 스냅샷 ID. NUMBER 타입 변수, 기본 값은 없다.
BASELINE_NAME베이스라인 이름 지정. VARCHAR2 타입 변수, 기본 값은 없다.
DBID데이터베이스 ID. 기본값은 프로시저를 수행한 데이터베이스 ID
  • 베이스라인으로 지정된 기준 구간과 비교 구간의 통계치 비교는
    awrddrpt.sql 스크립트와 awrdrpti.sql 스크립트를 사용하여 생성한 AWR DB 비교 보고서 출력.
  • 베이스라인으로 설정된 스냅샷은 RETENTION옵션으로 설정된 기간이 지나도 삭제되지 않는다.
  • 베이스라인 삭제시 베이스라인에 해당하는 스냅샷의 동반 삭제 여부를 결정할 수 있다.

BEGIN
    DBMS_WORKLOAD.REPOSITORY.DROP_BASELINE
    (BASELINE_NAME=>'BAD_BATCH', CASCADE=>true);
END;
/

SELECT * FROM DBA_HIST_BASELINE

옵션설명
BASELINE_NAME베이스라인 이름 지정. VARCHAR2 타입의 변수. 기본값은 없다.
CASCADE삭제할 베이스라인의 스냅샷 구간으로 지정된 스냅샷 삭제 여부 지정. BOOLEAN 타입의 변수.
TRUE 설정시 베이스라인에 해당하는 스냅샷도 같이 삭제. 기본값은 FALSE
DBID데이터베이스 ID. 기본값은 프로시저를 수행한 데이터베이스 ID