在日常数据库运维中,AWR(Automatic Workload Repository)报告 是我们分析系统性能瓶颈、定位问题的重要依据。它记录了数据库运行过程中的关键统计信息,为性能调优提供了坚实的数据支撑。然而,很多 DBA 都遇到过这样一个棘手的问题:AWR 报告生成缺失。
明明数据库一直在运行,到了分析阶段却发现某个时间段的报告空白,或者 awrrpt.sql 报告无法生成。这种“失踪的报告”,往往让人无从下手。今天,我们就来系统梳理下——为什么 AWR 会缺失,以及如何一步步排查解决。
一、AWR 的“自我生成”机制
Oracle 的 AWR 快照由 MMON(Manageability Monitor) 后台进程定期触发生成,默认每隔 1 小时创建一份快照,并将结果存放在 SYSAUX 表空间。
这些快照记录了 CPU 使用率、SQL 执行统计、等待事件、I/O 情况等信息,最终我们通过 awrrpt.sql 或 awrgrpt.sql 脚本生成报告。
当快照缺失时,本质上就是——MMON 没有成功执行任务 或 快照数据被清理/无法写入。
二、AWR 缺失的常见场景
1. 快照断层:比如 SNAP_ID 从 100 直接跳到 105,中间几份不见了。
2. 报告生成时报错:执行 awrrpt.sql 报错 ORA-13509 或 ORA-13516。
3. 多实例不一致:在 RAC 环境中,只看到部分实例快照。
4. 快照正常但报告为空:AWR 表被清理或统计信息异常。
这些看似不同的现象,背后往往指向三个核心问题:设置、空间、进程。
三、从源头排查:设置、空间、进程
1、检查 AWR 是否启用
执行:
SELECT status FROM dba_hist_wr_control;
若状态为 DISABLED,说明 AWR 功能被关闭。
可通过以下命令重新启用:
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval => 60, retention => 10080);
这会设置快照间隔为 1 小时、保留 7 天。
2、检查快照是否存在
SELECT SNAP_ID, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME
FROM dba_hist_snapshot
ORDER BY snap_id DESC;
如果发现中间跳号或缺失,说明快照没有生成。
这时可以手动创建一份快照验证:
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
若执行报错,则可能是 SYSAUX 表空间不足或 WRH$_ 系列表异常。
3、检查 SYSAUX 表空间
AWR 数据全部存放于 SYSAUX 表空间。
如果该表空间满了,AWR 快照将无法写入:
SELECT tablespace_name, bytes/1024/1024 MB, autoextensible
FROM dba_data_files
WHERE tablespace_name='SYSAUX';
必要时扩容或增加数据文件:
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/sysaux01.dbf' RESIZE 5G;
4、检查后台进程 MMON
MMON 是生成 AWR 的关键守护进程。
可查看是否正常运行:
SELECT pname, description
FROM v$bgprocess
WHERE pname IN ('MMON','MMNL');
如果 MMON 崩溃或被异常终止,AWR 将中断。
通常重启实例即可恢复;也可通过告警日志 (alert_
四、RAC 与多租户环境的特别注意
在 RAC 环境 中,每个实例独立生成 AWR 快照,最终在汇总报告中合并。
如果某个节点宕机或实例挂起,就可能出现“部分实例缺失”。
此时需使用 awrgrpt.sql 脚本生成“全局报告”。
在 CDB/PDB 架构 中,则必须在 CDB$ROOT 层执行相关命令,否则子库 PDB 无法自动创建快照。
五、防止 AWR “失踪”的经验总结
问题现象 主要原因 建议措施
快照断层 MMON 未运行或实例重启 定期检查进程状态
AWR 报告报错 SYSAUX 空间不足 预留至少 10% 可用空间
报告为空 WR 控制被禁用 启用 WR 控制并重新生成快照
RAC 数据不全 某实例未生成快照 使用 awrgrpt.sql 生成全局报告
快照频繁清理 RETENTION 设置过短 延长保留时间(如 10080 分钟)
| 问题现象 | 主要原因 | 建议措施 |
|---|---|---|
| 快照断层 | MMON 未运行或实例重启 | 定期检查进程状态 |
| AWR 报告报错 | SYSAUX 空间不足 | 预留至少 10% 可用空间 |
| 报告为空 | WR 控制被禁用 | 启用 WR 控制并重新生成快照 |
| RAC 数据不全 | 某实例未生成快照 | 使用 awrgrpt.sql 生成全局报告 |
| 快照频繁清理 | RETENTION 设置过短 | 延长保留时间(如 10080 分钟) |
六、结语:AWR 不只是“报告”,更是系统健康的晴雨表
AWR 报告的缺失,不仅仅是一个“无法生成报告”的问题,它往往反映了数据库运行机制的异常——可能是资源紧张、后台进程异常,甚至是监控体系不完善。
一个健康的 Oracle 系统,应该让 AWR 成为一面“镜子”:持续、稳定地记录性能波动,及时帮助我们发现潜在问题。
对于运维人员而言,不要等到性能问题出现时才想起 AWR。
定期检查快照生成情况、SYSAUX 空间、MMON 运行状态,建立一套完整的 AWR 监控策略,才能让这份“数据库体检报告”持续为你服务。
作者:Digital Observer(施嘉伟)
Oracle ACE Pro
PostgreSQL ACE Partner
Oracle OCM、KCM、PGCM、DB2 、MySQL OCP、PCTP、PCSD、OCI、PolarDB技术专家、达梦师资认证,从业11年+
ITPUB认证专家、崖山YVP、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师
公众号/墨天轮/金仓社区/IF Club:Digital Observer;CSDN/PGfans:施嘉伟;ITPUB:sjw1933





