当系统发生问题时,在对系统做任何修改之前,对问题进行准确和及时的诊断是很重要的。通常情况下,数据库管理员(DBA)只是简单的看一下症状,并立即开始修改系统来修复这些症状。但是,实际的问题,在初始阶段一个准确的诊断增加了解决问题的成功率。
随着Oracle数据库,准确诊断问题需要的统计数据存储在自动负载信息库(AWR)。自动数据库诊断监视器(ADDM):
- 定期分析AWR数据
- 诊断性能问题的根本原因
- 提供修改任何问题的建议
- 识别系统没问题的区域
有关AWR的信息,请参考:http://blog.csdn.net/chiclewu/article/details/16945623
在大多数情况,DBA在看性能问题报告之前,先看ADDM输出。ADDM提供以下几个好处:
- 默认每个小时自动收集性能诊断报告
- 基于优化期限的问题诊断
- 基于时间的问题影响和建议优势的量化
- 识别根本原因,不是症状
- 处理根本原因的建议
- 识别系统非问题区域
- 诊断过程中最小的系统开销
意识到优化是一个反向过程是很重要的,并修复一个可能是由瓶颈引起的转移到系统其他部分的问。即使有ADDM分析的好处,可能需要采取多个优化周期来达到可接受的系统性能。ADDM优势应用于生成系统。在开发和测试系统,ADDM可以提供一个早期性能问题的警告。
1.ADDM分析
ADDM分析可以在一对AWR快照和一组来自相同数据库的实例下执行。分析时间段定义的一对AWR快照,分析目标数据库定义的一组实例。
如果使用的真正应用集群(RAC),包括以下三种分析模式:
- 数据库
- 实例
- 部分
如果没有使用RAC,ADDM仅有实例模式功能,因为数据只有一个实例。
ADDM分析执行AWR快照花费,并保存结果在数据库中。ADDM分析的期间有过去的两个快照(默认最后一个小时)来定义.ADDM始终分析实例模式指定的实例。对于非Oracel RAC或单实例环境中,实例模式执行的分析是在同一数据库范围的分析。如果是使用Oracle RAC,ADMM分析数据库模式中整个数据库。ADDM 分析完成之后,可以通过Oracle企业管理器查看,或者使用SQL*Plus会话查看那视图报表。
ADDM分析进行自上而下,首先确定症状,然后分析他们来找到根本性能问题的原因。分析的目的是为了减少称为DB time的吞吐量指标。 DB time 是数据库在处理用户请求所花费的积累时间。它包括等待时间和所有非空用户会话的CPU时间。DB time显示在V$SESS_TIME_MODEL和V$SYS_TIME_MODEL视图中。
通过减少DB time,数据库能够使用相同的资源,以支持更多用户的请求,从而提高吞吐量。ADDM问题报告按照DB time负责的数量进行排序。DB time不负责的相当大的一部分系统区域作为报告的非问题区域。
ADDM认为包含以下几种问题类型:
- CPU瓶颈
- 较小的内存结构
- I/O容量问题
- 高负载SQL语句
- 高负载PL/SQL执行和编译
- RAC特定问题
- 数据库配置问题
- 并发问题
- 热对象和各个问题区域排序最高的SQL
2.设置ADDM
自动数据库诊断监视器默认是启用的,通过初始化参数CONTROL_MANAGEMENT_PACK_ACCESS 和STATISTICS_LEVEL控制。
CONTROL_MANAGEMENT_PACK_ACCESS参数应该设置为DIAGNOSTIC或DIAGNOSTIC+TUNING来启用自动数据库诊断监视器。默认设置为DIAGNOSTIC+TUNING。设置为NONE禁用ADDM。STATISTICS_LEVEL参数应该设置为TYPICAL或ALL来启用自动数据库诊断监视器。默认设置为TYPICAL。设置为BASIC禁用许多Oracle功能,包括ADDM。
I/O性能部分的ADDM分析依赖于DBIO_EXPECTED参数,该参数描述了I/O子系统的预期性能。DBIO_EXPECTED的值是以毫秒为单位读取单个数据块所有花费的平均值。Oracle默认使用10毫秒,这对于大多数现代的硬件设置是合适的。如果你的硬件显著不同,例如,非常老的硬件或非常快的RAM磁盘,考虑是用不同的值。
设置DBIO_EXPECTED参数:
- 测量你的硬件读取单个数据库文件的平均值。注意,这种测量是随机I/O,其中包括标准设备的寻道之间。对于硬盘设备的典型值是在5000至20000之间。
- 使用SYS用户连接到数据库,设置DBIO_EXPECTED参数值。
execute dbms_advisor.set_default_task_parameter('ADDM', 'DBIO_EXPECTED', 8000);
3.使用ADDM诊断数据库性能问题
要诊断数据库性能问题,首先要查看每次AWR快照自动创建的ADD分析结果。如果必要执行不同的分析(例如,更长的分析期间,不同的DBIO_EXPECTED 设置,或改变分析模式),则可以手动运行ADDM。ADDM可以分析任何两个AWR快照(在同一个数据库),只要这两个快照仍然存储在AWR中(尚未清除)。ADDM可以只分析那些刚开始快照之前启动的实例,并保持运行直到快照结束。
ADDM不会分析生成AWR快照时遇到显著错误的实例。
诊断监控器主要的接口是Oracle企业管理器,只要有可能,应该使用Oracle企业管理器运行ADDM。如果Oracle企业管理器不可用,则可以使用 DBMS_ADDM包运行ADDM。为了运行DBMS_ADDM包,用户必须被赋予ADVISOR 权限。
- 主要包含以下内容:
- 数据库模式运行ADDM
- 实例模式运行ADDM
- 部分模式运行ADDM
- 显示ADDM报告
3.1数据库模式运行ADDM
对于OracelRAC配置,可以数据库模式运行ADDM来分析数据库下的所有实例。
BEGIN
DBMS_ADDM.ANALYZE_DB (
task_name IN OUT VARCHAR2,
begin_snapshot IN NUMBER,
end_snapshot IN NUMBER,
db_id IN NUMBER := NULL);
END;
3.2实例模式运行ADDM
要分析特定的数据库实例,可以在实例模式下运行ADDM。
BEGIN
DBMS_ADDM.ANALYZE_INST (
task_name IN OUT VARCHAR2,
begin_snapshot IN NUMBER,
end_snapshot IN NUMBER,
instance_number IN NUMBER := NULL,
db_id IN NUMBER := NULL);
END;
3.3部分模式运行ADDM
要分析所有数据库实例的子集,可以在部分模式下运行ADDM。
BEGIN
DBMS_ADDM.ANALYZE_PARTIAL (
task_name IN OUT VARCHAR2,
instance_numbers IN VARCHAR2,
begin_snapshot IN NUMBER,
end_snapshot IN NUMBER,
db_id IN NUMBER := NULL);
END;
3.4显示ADDM报告
使用DBMS_ADDM.GET_REPORT函数显示执行ADDM任务的文本报告。
DBMS_ADDM.GET_REPORT (
task_name IN VARCHAR2
RETURN CLOB);
下面是显示指定任务名称的ADDM文本报告:
SET LONG 1000000 PAGESIZE 0;
SELECT DBMS_ADDM.GET_REPORT(:tname) FROM DUAL;
4.使用视图查看ADDM信息
通常情况下,你应该使用Oracle企业管理器或ADDM报告查看ADDM信息。然而,你可以使用以下视图查看ADDM信息:
- DBA_ADVISOR_FINDINGS
- DBA_ADDM_FINDINGS
- DBA_ADVISOR_FINDING_NAMES
- DBA_ADVISOR_RECOMMENDATIONS
- DBA_ADVISOR_TASKS