STATISTICS_LEVEL设为BASIC不会完全禁用AWR,但使其快照空壳化:仅保留元数据,跳过所有性能采样数据,并同时禁用ASH、SQL Tuning Advisor及ADDM,V$视图大量字段为空或零。
STATISTICS_LEVEL设为BASIC会禁用AWR吗
不会完全禁用,但会让awr失去实际采集能力。oracle中statistics_level参数控制的是基础统计信息的收集粒度,设为basic时:awr快照仍会生成(时间戳、实例信息等元数据还在),但所有性能相关的采样数据(如sql执行计划、等待事件、段级i/o、内存使用)全被跳过,相当于快照“空壳化”。
-
STATISTICS_LEVEL = BASIC:禁用AWR、ASH、Automatic SQL Tuning Advisor,且V$视图中大量字段返回NULL或0 -
STATISTICS_LEVEL = TYPICAL(默认):启用全部核心统计,包括AWR自动快照 -
STATISTICS_LEVEL = ALL:额外启用操作系统统计和计划执行细节(如PLAN_HASH_VALUE变化追踪),一般不必要
如何安全地关闭AWR自动收集
直接改STATISTICS_LEVEL是粗暴手段,副作用大;更稳妥的做法是保留统计能力,只停掉AWR快照生成本身。关键在DBMS_WORKLOAD_REPOSITORY包和调度器:
- 停用自动快照:运行
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval => 0),interval = 0表示禁用自动采样 - 确认生效:查
SELECT snap_interval, retention FROM dba_hist_wr_control,snap_interval应显示为+00000 00:00:00.0 - 注意:这不会删除已有快照,历史数据仍占空间;如需清理,用
DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE - 别动
STATISTICS_LEVEL——否则AWR报告生成会报错ORA-13516,连手动awrrpt.sql都跑不了
设成BASIC后哪些功能会意外失效
很多DBA以为只影响AWR,其实波及面很广。典型连锁反应:
-
ADDM分析完全不可用,因为依赖AWR数据源,报错ORA-13605: The specified task does not exist -
SQL Tuning Advisor无法自动生成建议,提示no statistics available -
V$SQL_PLAN_MONITOR、V$ACTIVE_SESSION_HISTORY视图为空或仅含极简字段 - 部分
DBMS_STATS操作(如gather_database_stats_job_proc)可能跳过对象,因底层判断逻辑依赖STATISTICS_LEVEL
资源节省效果到底有多大
禁用AWR自动收集确实能降低CPU和I/O压力,但别高估收益——现代Oracle实例中,AWR采样本身开销通常ADDM分析和SQL Tuning Advisor任务。
- 如果只是想省资源,优先停掉
ADDM:EXEC DBMS_ADVISOR.SET_TASK_PARAMETER('ADDM', 'MODE', 'RECOMMENDATION')→ 改为'OFF' -
STATISTICS_LEVEL = BASIC对SGA影响微乎其微,但会导致shared pool中部分统计相关latch争用消失(比如library cache lock减少) - 磁盘节省主要来自
SYSAUX表空间:默认7天保留期下,WRH$_系列表可占数GB;停快照后增长停止,但旧数据不会自动收缩
最常被忽略的一点:STATISTICS_LEVEL是动态参数,但修改后部分后台进程(如mmon)需重启才能彻底释放统计采集线程——有时改完参数,top里还能看到残留的mmon活动,得手工ALTER SYSTEM CHECKPOINT或等下次实例重启才干净。

















