为什么Oracle11g的SYSAUX表空间会自动增长过大

陌涛姑娘_6260

陌涛姑娘_6260

2026-10-13

412人浏览

原创

sysaux 表空间自动增长过快主因是 awr 快照、auto_stats_advisor_task 和统一审计等组件写入未及时清理;需用 v$sysaux_occupants 定位占用源,执行 flush_awr、drop_advisor_task、shrink space 等操作并验证效果。

为什么oracle11g的sysaux表空间会自动增长过大

SYSAUX 表空间在 Oracle 11g 中自动增长过快,基本不是“自动”行为,而是几个默认开启、但清理机制不健全的功能在持续写入且未被及时回收——最常踩坑的是 AWR 快照、AUTO_STATS_ADVISOR_TASK 和统一审计(虽 11g 默认未启用,但若手动开启则同样落 SYSAUX)。

查清楚谁在吃空间:优先用 v$sysaux_occupants 定位组件

v$sysaux_occupants 比 dba_segments 更快、更语义化,能直接看到功能模块级占用:

执行:SELECT occupant_name, ROUND(space_usage_kbytes/1024/1024, 2) AS gb FROM v$sysaux_occupants WHERE space_usage_kbytes > 0 ORDER BY space_usage_kbytes DESC;

重点关注以下几项:

  • SM/AWR:对应 WRH$_ 系列快照表,11g 默认保留 8 天,但若快照未真正 purge(比如有基线锁定、或 MMON 卡住),实际保留远超该值
  • SM/ADVISOR:11g 已含 AUTO_STATS_ADVISOR_TASK,其日志表 WRI$_ADV_OBJECTS 无自动清理逻辑,长期运行后可涨到数 GB
  • AUDSYS:仅在启用了统一审计时出现;11g 默认是传统审计(AUD$ 在 SYSTEM),但如果手动切了统一审计,日志就进 SYSAUX
  • OPTIMIZER:统计信息历史(WRI$_OPTSTAT 表)积累过多,尤其在频繁 dbms_stats.gather_table_stats 的场景下

drop_snapshot_range 删了快照却不释放空间?必须补 flush_awr

dbms_workload_repository.drop_snapshot_range 只删元数据和索引,底层 WRH$_ 表的数据行仍物理存在,空间不会回收:

确认当前保留策略:SELECT retention FROM dba_hist_wr_control; —— 11g 默认返回 691200 秒(8 天)

删完快照后务必立刻执行:EXEC dbms_workload_repository.flush_awr;

这一步强制触发 MMON 的段收缩逻辑。否则你看到的 “已删快照” 只是假象,WRH$_ACTIVE_SESSION_HISTORY 等大表仍占着空间。

若某分区特别膨胀,可直接截断:ALTER TABLE wrh$_active_session_history TRUNCATE PARTITION <partition_name>;</partition_name>

注意:TRUNCATE PARTITION 比整表 DELETE 安全,不锁全表,也不压爆 undo。

WRI$_ADV_OBJECTS 占几十 GB?直接删掉 AUTO_STATS_ADVISOR_TASK

这个任务在 11g 是默认启用的,但它的日志表 WRI$_ADV_OBJECTS + 3 个索引可轻松吃掉 10+ GB,且无自动清理:

它只用于生成统计信息体检报告,业务完全不需要,删掉不影响自动统计收集。

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载

以 SYS 用户执行:

DECLARE
  v_tname VARCHAR2(100);
BEGIN
  v_tname := 'AUTO_STATS_ADVISOR_TASK';
  DBMS_STATS.DROP_ADVISOR_TASK(v_tname);
END;
/

执行后,WRI$_ADV_OBJECTS 表数据会被清空(非立即 drop 表,而是逻辑清理),后续不再写入。

如果版本是 11.2.0.4 且打过某些补丁,可能遇到 BUG 导致 delete_expired_tasks 不生效——此时 DROP_ADVISOR_TASK 是最稳的兜底方案。

别忽略 WRH$_SQL_PLAN 和直方图残留

WRH$_SQL_PLAN 在 11g 中默认按 SQL ID + PLAN_HASH_VALUE 去重,但若大量 SQL 使用绑定变量且计划多变,仍会持续膨胀:

查行数:SELECT COUNT(*) FROM sys.wrh$_sql_plan; —— 若超千万级,需干预

它不响应 AWR 保留策略,得手动收缩:ALTER TABLE wrh$_sql_plan SHRINK SPACE CASCADE;

前提是先启用行移动:ALTER TABLE wrh$_sql_plan ENABLE ROW MOVEMENT;

另外,频繁收集带 method_opt => 'FOR ALL COLUMNS SIZE AUTO' 的直方图,会导致 WRI$_OPTSTAT_HISTGRM_HISTORY 爆炸式增长——建议改用 SIZE SKEWONLY 或定期清理历史:EXEC dbms_stats.purge_stats(SYSDATE - 30);

真正麻烦的从来不是“怎么删”,而是删完之后没人检查 flush_awr 是否真跑成功、没人确认 SHRINK SPACE 是否被阻塞、也没人盯住 DBA_AUTOTASK_CLIENT 里有没有残留的 advisor 任务开着。这些细节卡住,SYSAUX 就永远在“刚清理完又涨回来”的循环里。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

oracle

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

2023.08.16

941

5

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

2023.09.15

2713

5

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

2023.09.18

2730

5

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

2023.09.19

1549

3

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

2023.09.19

2173

7

oracle imp
oracle imp

imp是Oracle数据库中的一个命令行工具,用于将导出的数据和对象从一个数据库实例导入到另一个数据库实例。imp命令的一般语法为“imp username/password@connect_string file=file_name [options]”。

2023.09.19

2889

4

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4409

19

oracle通配符有哪些
oracle通配符有哪些

oracle通配符有“%”、“_”、“[]”和“[^]"。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.08

237

5

oracle四舍五入怎么操作
oracle四舍五入怎么操作

oracle四舍五入操作可以使用ROUND函数来实现,其语法为“ROUND(number, decimal_places)”,其中,number是要进行四舍五入的数值,decimal_places是指定的小数位数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.14

746

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程