优化器统计跟踪(SYS.EXP_HEAD$ SYS.EXP_OBJ$ SYS.EXP_STAT$不)导致表空间 SYSAUX不断增长
资料来自support文档 ID 2354960.1
环境:
aws rds 19c(亚马逊云oracle 数据库)
背景:
在一次查看数据库表段的占用空间大小的时候,无意间发现其中EXP_开头的表占用很大的空间,如下:
处理:
- 优化器表达式跟踪在具有以下对象的 SYSAUX 中分配了过多空间:
- Awrinfo 报告按以下对象显示大段使用情况
SYS.EXP_HEAD$
SYS.EXP_OBJ$
SYS.EXP_STAT$
统计监控在 12.2 中默认启用。12.2 中的新优化器功能引入了监视表达式统计信息,以收集 SQL 查询中的表达式使用统计信息。
监控功能由隐含参数“_column_tracking_level”控制。
当监控表达式统计处于活动状态时,默认情况下启用。
然而,扯淡的是云上oracle参数组根本关闭不了这个参数(没有这个参数)
注意:in-memory 关闭对 SQL 的执行计划没有影响。详情查看网页 https://blogs.oracle.com/optimizer/expression-tracking
--禁用参数:_column_tracking_level
alter system set "_column_tracking_level"=17 scope=both;
--wait 10 minutes
--purge 表里面的数据
exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO();
truncate table sys.exp_head$ drop storage;
truncate table sys.exp_obj$ drop storage;
truncate table sys.exp_stat$ drop storage;
alter index SYS.I_EXP_HEAD$ rebuild tablespace sysaux online;
alter index SYS.I_EXP_STAT$ rebuild tablespace sysaux online;
alter index SYS.I_EXP_OBJ$ rebuild tablespace sysaux online;
truncate table sys.exp_head$ drop storage;
truncate table sys.exp_obj$ drop storage;
truncate table sys.exp_stat$ drop storage;
alter index SYS.I_EXP_HEAD$ rebuild tablespace sysaux online;
alter index SYS.I_EXP_STAT$ rebuild tablespace sysaux online;
alter index SYS.I_EXP_OBJ$ rebuild tablespace sysaux online;
--如果需要重启监控
alter system set "_column_tracking_level"=21 scope=both;
注意:在执行这些步骤时,可能会遇到错误 ORA-00600: [qosdExpObjChange: rc!=1],这是内部错误 28681153 的结果:内部 PDCDB : ORA-00600:: [QOSDEXPSTATREAD: EXPCNT MISMATCH]。在这种情况下,可能需要重新启动数据库。