ADDM报告为空的三大主因:一是STATISTICS_LEVEL非TYPICAL/ALL导致关键统计缺失;二是指定快照区间DB Time<5秒,ADDM主动跳过分析;三是DBA_HIST_*视图(如ASH)数据不完整,使ADDM无法构建资源链路。
ADDM报告为空或无建议,根本不是AWR报告“没生成”
addm和awr报告是两个独立产物:awr报告是快照对比的统计汇总,addm报告是基于同一组快照、调用dbms_addm分析引擎生成的根因诊断。即使awr报告能正常输出,addm仍可能完全空白——这说明问题不在报告生成流程,而在addm的输入数据或运行前提不满足。
STATISTICS_LEVEL不是TYPICAL,ADDM直接静默失效
ADDM强制依赖数据库级统计采集能力。若STATISTICS_LEVEL被设为BASIC,AWR快照中关键维度(如SQL执行计划、等待事件细分、内存结构争用)全部缺失,ADDM失去分析依据,连“找不到瓶颈”都懒得报,直接返回空结果。
- 检查命令:
SHOW PARAMETER statistics_level,必须是TYPICAL或ALL - 临时修正:
ALTER SYSTEM SET statistics_level = TYPICAL SCOPE=BOTH;(需重启后生效的参数要谨慎) - 注意:改完参数不会自动补全历史快照数据,只对后续新快照生效
快照区间内DB Time过低,ADDM判定“无需分析”
ADDM默认只对DB Time ≥ 5秒的时段触发深度分析。如果指定的begin_snap到end_snap之间数据库几乎空闲(比如测试库夜间维护窗口),即使快照存在、参数正确,ADDM也会跳过生成任何FINDING——它不是“没运行”,而是主动放弃。
- 验证方法:先查该区间DB Time总量:
SELECT dbid, snap_id, db_time FROM dba_hist_sysmetric_summary WHERE snap_id BETWEEN :beg AND :end ORDER BY snap_id; - 若
db_time列多数为0或个位数,ADDM必然无输出 - 对策:换一个业务高峰期的快照范围,或手动创建负载再打快照
DBA_HIST_*视图数据不完整,ADDM读不到关键链路
ADDM不止查DBA_HIST_SNAPSHOT,还重度依赖DBA_HIST_ACTIVE_SESS_HISTORY(ASH采样)、DBA_HIST_SEG_STAT(段级I/O)、DBA_HIST_SYS_TIME_MODEL(时间模型)。任一视图在目标快照范围内数据为空或被截断,ADDM就无法拼出完整资源路径,最终只输出“no findings”。
- 快速排查:
SELECT COUNT(*) FROM dba_hist_active_sess_history WHERE snap_id BETWEEN :beg AND :end;若为0,ASH数据丢失 - 常见原因:SYSAUX表空间满导致WRH$_表写入失败;或
_ASH_DISK_FILTER_RATIO被调得过高,丢弃大量采样 - 不要只看
dba_hist_snapshot有无记录——那是AWR的壳,ADDM要的是里面的数据肉











