ADDM是 Automatic Database Diagnostic Monitor的缩写,字面上看出是一个自动诊断工具。利用这个工具可以发现潜在的性能问题和瓶颈,并提供了解决问题的建议和方案,要使用这个工具必须设置参数STATISTICS_LEVEL为TYPICAL(默认)或者ALL。
使用ADDM可以获得如下的这些数据:
CPU负载、内存使用情况、I/O使用情况、高耗费资源的SQL\PLSQL等等、应用程序问题、数据库配置问题、连接性问题、对象问题和RAC问题等等。
好了,下面来说下如何使用这个工具吧。
0. addmrpt.sql脚本
这个脚本的位置在rdbms/admin/addmrpt.sql,使用很简单,直接调用这个脚本即可。
[oracle@gtlions ~]$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.5.0 - Production on Wed Mar 7 01:19:09 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
sys@GT10G> show parameter satistics_level;
sys@GT10G> show parameter statistics_level;
NAME TYPE VALUE
------------------------------------ -------- ------------------------------
statistics_level string TYPICAL
sys@GT10G> @?/rdbms/admin/addmrpt.sql
。。。。。。
。。。。。。
在列出最近的快照列表中选择你要生成报告的起始和结束的快照号,默认的是列出最近3天的快照,如果需要列出更长时间的,需要自行修改脚本,注意的是选择的起始和结束快照之间不能有实例中断的情况,生成的报告的文件名称,生成的报告默认保存在当前路径下,
1. 使用DBMS_ADVISOR工具包
如果你无法登录到服务器进行操作的话,可以使用这个包在sqlplus里面进行操作:设置任务、设置快照起始值、设置快照结束值、运行任务、获得报告。
可以参考官方的一个函数来执行以上任务:
CREATE OR REPLACE FUNCTION run_addm(start_time IN DATE, end_time IN DATE )
RETURN VARCHAR2
IS
begin_snap NUMBER;
end_snap NUMBER;
tid NUMBER; -- Task ID
tname VARCHAR2(30); -- Task Name
tdesc VARCHAR2(256); -- Task Description
BEGIN
-- Find the snapshot IDs corresponding to the given input parameters.
SELECT max(snap_id)INTO begin_snap
FROM DBA_HIST_SNAPSHOT
WHERE trunc(end_interval_time, 'MI') <= start_time;
SELECT min(snap_id) INTO end_snap
FROM DBA_HIST_SNAPSHOT
WHERE end_interval_time >= end_time;
--
-- set Task Name (tname) to NULL and let create_task return a
-- unique name for the task.
tname := '';
tdesc := 'run_addm( ' || begin_snap || ', ' || end_snap || ' )';
--
-- Create a task, set task parameters and execute it
DBMS_ADVISOR.CREATE_TASK( 'ADDM', tid, tname, tdesc );
DBMS_ADVISOR.SET_TASK_PARAMETER( tname, 'START_SNAPSHOT', begin_snap );
DBMS_ADVISOR.SET_TASK_PARAMETER( tname, 'END_SNAPSHOT' , end_snap );
DBMS_ADVISOR.EXECUTE_TASK( tname );
RETURN tname;
END;
/
-- set SQL*Plus variables and column formats for the report
SET PAGESIZE 0 LONG 1000000 LONGCHUNKSIZE 1000;
COLUMN get_clob FORMAT a80;
-- execute run_addm() with 7pm and 9pm as input
VARIABLE task_name VARCHAR2(30);
BEGIN
:task_name := run_addm( TO_DATE('20120311 12:00:00', 'YYYYMMDD HH24:MI:SS'),
TO_DATE('20120312 12:00:00', 'YYYYMMDD HH24:MI:SS') );
END;
/
-- execute GET_TASK_REPORT to get the textual ADDM report.
SELECT DBMS_ADVISOR.GET_TASK_REPORT(:task_name)
FROM DBA_ADVISOR_TASKS t
WHERE t.task_name = :task_name
AND t.owner = SYS_CONTEXT( 'userenv', 'session_user' );
可以看到实际上是调用了几个过程和函数来实现:创建任务,设置任务参数、执行任务;最后通过任务视图来获取报告。
也可以单独来执行处理:
BEGIN
-- Create an ADDM task.
DBMS_ADVISOR.create_task (
advisor_name => 'ADDM',
task_name => 'MYADDM',
task_desc => 'MYADDM');
-- Set the start and end snapshots.
DBMS_ADVISOR.set_task_parameter (
task_name => 'MYADDM',
parameter => 'START_SNAPSHOT',
value => 101);
DBMS_ADVISOR.set_task_parameter (
task_name => 'MYADDM',
parameter => 'END_SNAPSHOT',
value => 130);
-- Execute the task.
DBMS_ADVISOR.execute_task(task_name => 'MYADDM');
END;
/
-- Display the report.
SET LONG 100000
SET PAGESIZE 50000
SELECT DBMS_ADVISOR.get_task_report('MYADDM') AS report
FROM dual;
2. Enterprise Manager
这个就不多做说明了。
3. 相关视图
DBA_HIST_SNAPSHOT --存放的是快照信息
DBA_ADVISOR_TASKS --存放的是addm任务 Basic information about existing tasks.
DBA_ADVISOR_LOG --addm执行日志
DBA_ADVISOR_FINDINGS ---addm诊断结果概述 不同模块存放
DBA_ADVISOR_RECOMMENDATIONS ---addm诊断结果建议 不同模块存放
-The End-
使用ADDM可以获得如下的这些数据:
CPU负载、内存使用情况、I/O使用情况、高耗费资源的SQL\PLSQL等等、应用程序问题、数据库配置问题、连接性问题、对象问题和RAC问题等等。
好了,下面来说下如何使用这个工具吧。
0. addmrpt.sql脚本
这个脚本的位置在rdbms/admin/addmrpt.sql,使用很简单,直接调用这个脚本即可。
[oracle@gtlions ~]$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.5.0 - Production on Wed Mar 7 01:19:09 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
sys@GT10G> show parameter satistics_level;
sys@GT10G> show parameter statistics_level;
NAME TYPE VALUE
------------------------------------ -------- ------------------------------
statistics_level string TYPICAL
sys@GT10G> @?/rdbms/admin/addmrpt.sql
。。。。。。
。。。。。。
在列出最近的快照列表中选择你要生成报告的起始和结束的快照号,默认的是列出最近3天的快照,如果需要列出更长时间的,需要自行修改脚本,注意的是选择的起始和结束快照之间不能有实例中断的情况,生成的报告的文件名称,生成的报告默认保存在当前路径下,
1. 使用DBMS_ADVISOR工具包
如果你无法登录到服务器进行操作的话,可以使用这个包在sqlplus里面进行操作:设置任务、设置快照起始值、设置快照结束值、运行任务、获得报告。
可以参考官方的一个函数来执行以上任务:
CREATE OR REPLACE FUNCTION run_addm(start_time IN DATE, end_time IN DATE )
RETURN VARCHAR2
IS
begin_snap NUMBER;
end_snap NUMBER;
tid NUMBER; -- Task ID
tname VARCHAR2(30); -- Task Name
tdesc VARCHAR2(256); -- Task Description
BEGIN
-- Find the snapshot IDs corresponding to the given input parameters.
SELECT max(snap_id)INTO begin_snap
FROM DBA_HIST_SNAPSHOT
WHERE trunc(end_interval_time, 'MI') <= start_time;
SELECT min(snap_id) INTO end_snap
FROM DBA_HIST_SNAPSHOT
WHERE end_interval_time >= end_time;
--
-- set Task Name (tname) to NULL and let create_task return a
-- unique name for the task.
tname := '';
tdesc := 'run_addm( ' || begin_snap || ', ' || end_snap || ' )';
--
-- Create a task, set task parameters and execute it
DBMS_ADVISOR.CREATE_TASK( 'ADDM', tid, tname, tdesc );
DBMS_ADVISOR.SET_TASK_PARAMETER( tname, 'START_SNAPSHOT', begin_snap );
DBMS_ADVISOR.SET_TASK_PARAMETER( tname, 'END_SNAPSHOT' , end_snap );
DBMS_ADVISOR.EXECUTE_TASK( tname );
RETURN tname;
END;
/
-- set SQL*Plus variables and column formats for the report
SET PAGESIZE 0 LONG 1000000 LONGCHUNKSIZE 1000;
COLUMN get_clob FORMAT a80;
-- execute run_addm() with 7pm and 9pm as input
VARIABLE task_name VARCHAR2(30);
BEGIN
:task_name := run_addm( TO_DATE('20120311 12:00:00', 'YYYYMMDD HH24:MI:SS'),
TO_DATE('20120312 12:00:00', 'YYYYMMDD HH24:MI:SS') );
END;
/
-- execute GET_TASK_REPORT to get the textual ADDM report.
SELECT DBMS_ADVISOR.GET_TASK_REPORT(:task_name)
FROM DBA_ADVISOR_TASKS t
WHERE t.task_name = :task_name
AND t.owner = SYS_CONTEXT( 'userenv', 'session_user' );
可以看到实际上是调用了几个过程和函数来实现:创建任务,设置任务参数、执行任务;最后通过任务视图来获取报告。
也可以单独来执行处理:
BEGIN
-- Create an ADDM task.
DBMS_ADVISOR.create_task (
advisor_name => 'ADDM',
task_name => 'MYADDM',
task_desc => 'MYADDM');
-- Set the start and end snapshots.
DBMS_ADVISOR.set_task_parameter (
task_name => 'MYADDM',
parameter => 'START_SNAPSHOT',
value => 101);
DBMS_ADVISOR.set_task_parameter (
task_name => 'MYADDM',
parameter => 'END_SNAPSHOT',
value => 130);
-- Execute the task.
DBMS_ADVISOR.execute_task(task_name => 'MYADDM');
END;
/
-- Display the report.
SET LONG 100000
SET PAGESIZE 50000
SELECT DBMS_ADVISOR.get_task_report('MYADDM') AS report
FROM dual;
2. Enterprise Manager
这个就不多做说明了。
3. 相关视图
DBA_HIST_SNAPSHOT --存放的是快照信息
DBA_ADVISOR_TASKS --存放的是addm任务 Basic information about existing tasks.
DBA_ADVISOR_LOG --addm执行日志
DBA_ADVISOR_FINDINGS ---addm诊断结果概述 不同模块存放
DBA_ADVISOR_RECOMMENDATIONS ---addm诊断结果建议 不同模块存放
-The End-