Header background

ADDM

Admin

Written by Admin

Last updated

ADVISOR FRAMWORK 작동 모드

기본적으로 ADVISOR의 작동은 자동 모드와 수동 모드가 존재한다.

ADDM (10g)

- On-demand ADDM (10gR1)

- Automatic ADDM (10gR1)

Real-time ADDM (12cR1)

ADDM

1) Normal(일반) ADDM (10gR1)

--> 소스: AWR

2) Automatic ADDM (10gR1)

--> 소스: AWR

AWR 스냅샷 생성 시 마다 ADDM 분석 작업이 수행되고 해당 결과 및 권장 사항 저장 -> DBA_ADVISOR_RECOMMENDATIONS

3) Real-time ADDM (12cR1)

--> 소스: AWR, ASH

● MMON이 3초마다 현재 메모리(메모리다이렉트액세스)에 있는 통계를 확인하고 성능 이슈가 감지되면 real-time ADDM analysis를 수행하고 보고서를 생성하여 AWR에 저장 ->

● 결과조회: DBA_HIST_REPORTS, DBA_HIST_REPORTS_DETAILS

ADDM은 AWR 스냅샷이 생성될 때마다 호출되고, 가장 최근의 스냅샷과의 비교를 통해 권고사항을 제시합니다. 따라서 비교해야 할 두 스냅샷이 서로 인접한 경우에는 (이미 보고서가 생성되어 있으므로) 별도로 ADDM 태스크를 실행할 필요가 없으며, 스냅샷이 인접해 있지 않은 경우에만 ADDM 태스크를 실행할 필요가 있다.

ADDM의 기능이 단순히 SQL 구문의 분석에 한정되지 않는다. ADDM은 메모리, 세그먼트, Redu/Undo 영역 외의 아주 다양한 분석 기능을 제공한다. 그 중 SQL Tuning Advisor에 대하여 확인해 본다.

ADDM

■ 개요

ADDM는 AWR의 데이터를 분석하여 성능 병목 현상을 식별

각 문제에 대한 근본 원인(root cause)을 찾고, 개선을 위한 권장 사항(recommendations)을 제공

STATISTICS_LEVEL=TYPICAL 또는 ALL로 설정된 경우, AWR 스냅샷이 생성될 때마다 ADDM 분석 작업이 자동으로 수행되고 해당 결과 및 권장 사항이 DB에 저장됨

주요 ADDM 분석 항목:

  1. CPU load

  2. Memory usage

  3. I/O usage

  4. Resource intensive SQL

  5. Resource intensive PL/SQL and Java

  6. RAC issues

  7. Application issues

  8. Database configuration issues

  9. Concurrency issues

  10. Object contention

  11. 주요 권장 사항(recommendations) 항목:

  12. Hardware changes(변경 사항)

  13. Database configuration changes

  14. Schema changes

  15. Application changes

  16. Using other advisors

■ 전제 조건:

STATISTICS_LEVEL = TYPICAL or ALL

CONTROL_MANAGEMENT_PACK_ACCESS = DIAGNOSTIC+TUNING

■ addm report 수행 권한:

sqlplus / as sysdba

GRANT ADVISOR TO REPORT_USER; --> sql tuning advisor API를 수행하기 위한 권한

GRANT SELECT_CATALOG_ROLE TO REPORT_USER;

GRANT EXECUTE ON dbms_workload_repository TO REPORT_USER;

■기본사용법-예제

■ 예제 1 - On-demand ADDM report 수행 방법 (기본)

SQL> @/u01/app/oracle/product/10.1.0/db_1/rdbms/admin/addmrpt.sql

■ 예제 2 - On-demand ADDM report 수행 방법 (10gR2)

0) Identify an AWR snapshot range

1) Create an ADDM task

2) Set the start and end AWR snapshots

3) Execute the task

4) Display the report

SET LINESIZE 120
col instid format 9999
col begin_interval_time format A30
col end_interval_time format A30
col startup_time format A30
SELECT dbid, instance_number instid, snap_id, begin_interval_time, end_interval_time, startup_time FROM dba_hist_snapshot
WHERE begin_interval_time > TRUNC(SYSTIMESTAMP) ORDER BY snap_id;
BEGIN
-- Create an ADDM task
DBMS_ADVISOR.create_task (
advisor_name => 'ADDM',
task_name => '970_1032_AWR_SNAPSHOT',
task_desc => 'Advisor for snapshots 970 to 1032.');
-- Set the start and end snapshots
DBMS_ADVISOR.set_task_parameter (
task_name => '970_1032_AWR_SNAPSHOT',
parameter => 'START_SNAPSHOT',
value => 970);
DBMS_ADVISOR.set_task_parameter (
task_name => '970_1032_AWR_SNAPSHOT',
parameter => 'END_SNAPSHOT',
value => 1032);
-- Execute the task
DBMS_ADVISOR.execute_task(task_name => '970_1032_AWR_SNAPSHOT');
END;
/
-- GET_TASK_REPORT
SET LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 1000 PAGESIZE 0 TRIM ON TRIMSPOOL ON ECHO OFF FEEDBACK OFF
SELECT DBMS_ADVISOR.get_task_report('970_1032_AWR_SNAPSHOT') AS report FROM dual;

● 관련 Views

- GET_TASK_REPORT function 사용 안하고 아래 View로 조회 가능함

DBA_ADVISOR_TASKS - Basic information about existing tasks.

DBA_ADVISOR_LOG - Status information about existing tasks.

DBA_ADVISOR_FINDINGS - Findings identified for an existing task.

DBA_ADVISOR_RECOMMENDATIONS - Recommendations for the problems identified by an existing task.

■ 예제 3 - On-demand ADDM report 수행 방법 (11gR1)

● Identify an AWR snapshot range

-- GET_TASK_REPORT
SET LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 1000 PAGESIZE 0 TRIM ON TRIMSPOOL ON ECHO OFF FEEDBACK OFF
SELECT DBMS_ADVISOR.get_task_report('970_1032_AWR_SNAPSHOT') AS report FROM dual;
set linesize 120
col instid format 9999
col begin_interval_time format A30
col end_interval_time format A30
col startup_time format A30
SELECT dbid, instance_number instid, snap_id, begin_interval_time, end_interval_time, startup_time
FROM dba_hist_snapshot
WHERE begin_interval_time > TRUNC(SYSTIMESTAMP) ORDER BY snap_id;

● ANALYZE_DB

-- If the DB_ID is NULL, current database.
DECLARE
l_task_name VARCHAR2(30) := '1783_1785_addm_db';
BEGIN
DBMS_ADDM.analyze_db (
task_name => l_task_name,
begin_snapshot => 1783,
end_snapshot => 1785,
db_id => 20808282 );
END;
/

● ANALYZE_INST

-- If the INSTANCE_NUMBER is NULL, current instance.
-- If the DB_ID is NULL, current database.
DECLARE
l_task_name VARCHAR2(30) := '1783_1785_addm_inst';
BEGIN
DBMS_ADDM.analyze_inst (
task_name => l_task_name,
begin_snapshot => 1783,
end_snapshot => 1785,
instance_number => 1,
db_id => 20808282 );
END;
/

● GET_TASK_REPORT

SET LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 1000 PAGESIZE 0 TRIM ON TRIMSPOOL ON ECHO OFF FEEDBACK OFF
SELECT DBMS_ADVISOR.get_task_report('1783_1785_addm_db') AS report FROM dual;
SELECT DBMS_ADVISOR.get_task_report('1783_1785_addm_inst') AS report FROM dual;

● DELETE the ADDM Task

BEGIN
DBMS_ADDM.delete('1783_1785_addm_db');
END;
/

● ADDM analysis 및 reporting에 영향을 주는 서브-프로그램 참고

INSERT_FINDING_DIRECTIVE : 특정 결과에 대한 보고를 제한
INSERT_PARAMETER_DIRECTIVE : ADDM이 특정 매개변수를 변경하는 작업을 생성하지 못하도록 제어
INSERT_SEGMENT_DIRECTIVE : ADDM이 특정 세그먼트에 대해 Segment Advisor를 실행하는 작업을 생성하지 못하도록 제어
INSERT_SQL_DIRECTIVE : 특정 SQL에 대한 작업 보고를 제한
DELETE_FINDING_DIRECTIVE : 찾기 지시문을 삭제
DELETE_PARAMETER_DIRECTIVE : 매개변수 지시문을 삭제
DELETE_SEGMENT_DIRECTIVE : 세그먼트 지시문을 삭제
DELETE_SQL_DIRECTIVE : SQL 지시문을 삭제