自动任务是抢占资源的前台作业,需通过AWR“Automatic Maintenance Tasks”章节查执行时间、DB Time、状态及等待事件;ADDM建议禁用统计收集源于其与高负载重叠及DB CPU突增超15%;内存占用须结合Memory Statistics、Top SQL和dba_autotask_client交叉验证;停用后AWR“干净”可能是掩盖统计陈旧引发的逻辑读暴增与缓存争用。
自动任务不是“背景服务”,而是会真实抢占cpu、内存、i/o资源的前台作业;不查awr里的automatic maintenance tasks模块,就等于闭着眼睛调优。
怎么看自动任务在AWR里干了什么
19c的AWR报告中,“Automatic Maintenance Tasks”是一个独立章节,但很多人直接跳过。它不是统计汇总,而是记录了每个自动任务(如auto optimizer stats collection、sql tuning advisor、segment advisor)的实际执行时间、消耗DB Time、是否超时、是否被强制终止。
- 重点看“Duration (s)”列:如果某次
auto optimizer stats collection耗时超过30分钟,且发生在业务高峰期,它大概率就是那段时间CPU飙升的元凶 - 注意“Status”字段:出现
FAILED或TIMEOUT时,别只当警告忽略——失败任务常伴随大量enq: TX - row lock contention或latch: cache buffers chains等待,说明它正在和业务SQL抢资源 - 对比“DB Time (s)”和“Elapsed Time (s)”:若前者远大于后者(比如DB Time 1200s,Elapsed仅200s),说明该任务引发大量并发等待,不是它自己慢,而是它拖垮了别人
为什么ADDM建议里总提“Consider disabling automatic statistics gathering”
ADDM在19c中会主动在“SQL Statistics”或“Instance Efficiency Percentages”旁嵌入建议,只要检测到auto optimizer stats collection与高负载时段重叠,就会触发这条提示。这不是保守建议,而是基于量化证据:
- 它计算了该任务期间的
DB CPU占比突增幅度,若超过基线15%以上,ADDM就认定为干扰源 - 它关联了ASH数据:发现任务运行时,
log file sync平均等待时间从600μs跳到2.3ms,说明日志写入被阻塞 - 它检查了
v$parameter中statistics_level是否为TYPICAL(默认值),确认统计收集功能确实启用——避免误判为配置关闭却仍有残留作业
怎么确认自动任务真正在吃内存而不是“背锅”
内存泄露类故障(如凌晨2点OOM)常被归咎于自动任务,但AWR本身不直接显示内存分配细节。必须交叉验证三处:
- 查AWR的“Memory Statistics”页:看
Shared Pool Free %是否在任务执行窗口内从45%骤降至3%,同时Large Pool Alloc增长异常——这是sql tuning advisor大量生成SQL Profile导致的典型现象 - 翻“Top SQL”列表:找
sql_id以/* SQL Analyze(开头的语句,它们是自动SQL调优任务生成的,单条可能消耗数百MB PGA - 核对
dba_autotask_client视图:执行SELECT client_name, status, window_group FROM dba_autotask_client,确认sql tuning advisor是否在非维护窗口(如WEEKNIGHT_WINDOW)外被手动启用过
关掉自动任务后AWR报告反而更“干净”?小心这个陷阱
停用auto optimizer stats collection后,AWR里“Optimizer Activity”模块会消失,Top 5 Timed Events里DB CPU占比下降——但这不代表性能变好,而是掩盖了更深层问题:
- 统计信息陈旧会导致优化器持续选择错误执行计划,表现为“SQL ordered by Gets”里某条语句逻辑读暴增,但DB CPU反而不高
- AWR的“Instance Efficiency Percentages”中
Buffer Nowait %可能从99.8%跌到92%,说明缓存争用加剧,只是没体现在等待事件榜首 - 最危险的是:ADDM不再给出“Consider gathering statistics”建议,你失去了对统计滞后程度的量化感知
真正要盯的不是“有没有自动任务”,而是它是否在错的时间、用错的方式运行——比如把统计收集窗口设成WEEKEND_WINDOW,却让核心OLTP系统周末照常跑批处理。



















