WRI$_ADV_OBJECTS表过大,导致PDB的SYSAUX表空间不足
现象
监控发现sysaux表空间使用不断增加,导致表空间不足
查看过程
查看版本:
- SQL> select * from v$version;
- BANNER CON_ID
- -------------------------------------------------------------------------------- ----------
- Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
- PL/SQL Release 12.2.0.1.0 - Production 0
- CORE 12.2.0.1.0 Production 0
- TNS for Linux: Version 12.2.0.1.0 - Production 0
- NLSRTL Version 12.2.0.1.0 - Production 0
- SQL>
查看v$sysaux_occupants,发现SM/ADVISOR排在第一
- SQL> set lines 120
- SQL> col occupant_name format a30
- SQL> select occupant_name,space_usage_kbytes from v$sysaux_occupants order by space_usage_kbytes desc;
查看dba_segments,发现WRI$_ADV_OBJECTS占用最大
- SQL> col segment_name format a30
- SQL> col owner format a10
- SQL> col tablespace_name format a10
- SQL> col segment_type format a15
- SQL> select segment_name,owner,tablespace_name,bytes/1024/1024 "SIZE(MB)",segment_type from dba_segments where tablespace_name='SYSAUX' order by bytes desc;
也可以通过awrinfo查看。
原因
因为在12.2中,引入了新的特性:optimizer statistics advisor。优化器统计信息顾问每天都会在维护窗口运行,auto_stats_advisor_task多次运行,因而会消耗大量sysaux表空间。
- SQL> col task_name format a35
- SQL> select task_name, count(*) cnt from dba_advisor_objects group by task_name order by cnt desc;
- TASK_NAME CNT
- ----------------------------------- ----------
- SYS_AUTO_SQL_TUNING_TASK 20703
- AUTO_STATS_ADVISOR_TASK 9881
解决方案
方案1.删除statistics advisor task(auto_stats_advisor_task),删除该任务后就可以释放统计信息顾问产生的数据
直接删除该任务:
- declare
- v_tname varchar2(32767);
- begin
- v_tname := 'AUTO_STATS_ADVISOR_TASK';
- dbms_stats.drop_advisor_task(v_tname);
- end;
- /
一旦任务被删除,与任务相关的结果数据都会从表WRI$_ADV_OBJECTS删除。
在删除任务的过程中,可能会遇到下面的错误:
- ORA-20001: Statistics Advisor: Invalid Task Name For the current user
如果遇到上面的错误,可以先重建AUTO_STATS_ADVISOR_TASK来解决问题:
- SQL> connect / as sysdba
- SQL> EXEC DBMS_STATS.INIT_PACKAGE();
删除任务后,重新组织表和索引
- SQL> alter table wri$_adv_objects move;
- SQL> alter index wri$_adv_objects_idx_01 rebuild;
- SQL> alter index wri$_adv_objects_pk rebuild;
方案2.如果表WRI$_ADV_OBJECTS比较大,删除任务AUTO_STATS_ADVISOR_TASK会需要很多的undo表空间
可以通过以下方式purge数据,不会过度的产生redo/undo数据
- ### Check the no.of rows in WRI$_ADV_OBJECTS for Auto Stats Advisor Task ###
- SQL> select count(*) from wri$_adv_objects where task_id=(select distinct id from wri$_adv_tasks where name='AUTO_STATS_ADVISOR_TASK');
- COUNT(*)
- ----------
- 46324479
- ### Do CTAS from WRI$_ADV_OBJECTS to keep the rows apart from AUTO_STATS_ADVISOR_TASK ###
- SQL> create table wri$_adv_objects_new as select * from wri$_adv_objects where task_id !=(select distinct id from wri$_adv_tasks where name='AUTO_STATS_ADVISOR_TASK');
- SQL> select count(*) from wri$_adv_objects_new;
- COUNT(*)
- ----------
- 359
- ### Truncate the table ###
- SQL> truncate table wri$_adv_objects;
- ### Insert the rows from backed up table WRI$_ADV_OBJECTS_NEW to restore the records of ther advisor objects ###
- SQL> insert /*+ APPEND */ into wri$_adv_objects select * from wri$_adv_objects_new;
- SQL> commit;
- SQL> drop table wri$_adv_objects_new;
- ### Reorganize the indexes ###
- SQL> alter index wri$_adv_objects_idx_01 rebuild;
- SQL> alter index wri$_adv_objects_pk rebuild;
其它
重建AUTO_STATS_ADVISOR_TASK
Optimizer Statistics Advisor Task (AUTO_STATS_ADVISOR_TASK)可以在任何时刻进行重建
- SQL> EXEC DBMS_STATS.INIT_PACKAGE();
也可以禁用该任务,而不是删除
- declare
- filter1 clob;
- begin
- filter1 := dbms_stats.configure_advisor_rule_filter('AUTO_STATS_ADVISOR_TASK',
- 'EXECUTE',
- NULL,
- 'DISABLE');
- END;
- /
参考文档:SYSAUX Tablespace Grows Rapidly After Upgrading Database to 12.2.0.1 Due To Statistics Advisor (Doc ID 2305512.1)
WRI$_ADV_OBJECTS表过大,导致PDB的SYSAUX表空间不足的更多相关文章
- 【Spark调优】大表join大表,少数key导致数据倾斜解决方案
[使用场景] 两个RDD进行join的时候,如果数据量都比较大,那么此时可以sample看下两个RDD中的key分布情况.如果出现数据倾斜,是因为其中某一个RDD中的少数几个key的数据量过大,而另一 ...
- 转 listener.log文件过大导致oracle数据库连接非常慢
数据库(31) 最近发现oracle数据库连接非常慢,sqlplus很快,用客户端就很慢,甚至会无响应. 然后服务器内存一下就飙升到了90%,不是表空间占满了,也不是数据库连接数占满了.重启还是一样 ...
- 分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据
分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据 今天开发找我,说数据库insert不进数据,叫我看一下 他发了一个截图给我 然后我登录上服务器,发现了可疑的地方,而且这个数据库之前 ...
- 解决父类加载iframe,src参数过大导致加载失败
原文:解决父类加载iframe,src参数过大导致加载失败 <iframe src="*******.do?param=****" id="leftFrame&qu ...
- 【Spark调优】小表join大表数据倾斜解决方案
[使用场景] 对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(例如几百MB或者1~2GB),比较适用此方案. [解决方案] ...
- 小表驱动大表, 兼论exists和in
给出两个表,A和B,A和B表的数据量, 当A小于B时,用exists select * from A where exists (select * from B where A.id=B.id) ex ...
- Oracle 监听器日志文件过大导致监听异常
Oracle 监听器日志文件过大导致监听异常 db版本:11.2.0.1 os版本:windows2008 现象: 应用异常,无法连接数据库.登陆数据库服务器,查看监听已经断掉.尝试重启监听,重启失败 ...
- 顺序线性表之大整数求和C++
顺序线性表之大整数求和 大整数求和伪代码 1.初始化进位标志 flag=0: 2.求大整数 A 和 B 的长度: int aLength = a.GetLength(); int bLength = ...
- 【经验随笔】MYSQL表加锁升级导致数据库访问失败
背景:有一次定位问题发现,在同一个session连接中对MYSQL部分表加锁,导致其它未加锁的表不能访问. 用Spring管理MYSQL数据连接,在多线程访问数据库的情况下容易出问题.一个线程中对部分 ...
随机推荐
- [转] Optimizely:在线网站A/B测试平台
Optimizely:在线网站A/B测试平台是一家提供 A/B 测试服务的公司.A/B 测试能够对比不同版本的设计,选取更吸引用户眼球的那一款,从而带来更为优化的个人体验.让网站所有者易于对不同版本的 ...
- Codeforces 269C Flawed Flow (看题解)
我好菜啊啊啊.. 循环以下操作 1.从队列中取出一个顶点, 把哪些没有用过的边全部用当前方向. 2.看有没有点的入度和 == 出度和, 如果有将当前的点加入队列. 现在有一个问题就是, 有没有可能队列 ...
- Redis数据结构之字符串
学习阶段分成两个部分,一个是redis客户端,一个是java客户端操作 一:在redis客户端操作 1.先删除里面的几个key 2.set与get与getset 3.数值的增减 值递增1,或者减一 如 ...
- codeforces 366C Dima and Salad 【限制性01背包】
<题目链接> 题目大意: 在一个水果篮里有n种水果,并且这些水果每一种都有一个美味度和一个卡路里的属性, 小明要从这些水果中选出来一些做一个水果沙拉, 并且要求他的水果沙拉的美味度是卡路里 ...
- Linux学习之文件系统常用命令(七)
Linux文件系统常用命令 目录 df命令 du命令 fsck命令 dump2fs命令 df命令 df命令 统计文件系统的占有情况,分区用了多少空间,还剩多少空间 df [选项] [挂载点] 选项: ...
- Java线程池深入理解
之前面试baba系时遇到一个相对简单的多线程编程题,即"3个线程循环输出ADC",自己答的并不是很好,深感内疚,决定更加仔细的学习<并发编程的艺术>一书,到达掌握的强度 ...
- shell 环境变量
Ubuntu系统设置的环境变量 .profile .bashrc 在 .profile中 有一段代码: if [ -d "$HOME/bin" ] ; then PATH=&quo ...
- scikit-learn全局图
https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
- Python HTTP 请求时对重定向中的 cookie 的处理
首先说明一下,我使用的是 Python3 的 urllib,但 Python2.x 同理(使用 urllib2). 想用脚本去登录一个网站.和很多网站一样,该网站使用 cookie 来保存会话信息.这 ...
- 数值分析之Neville's Algorithm
Neville插值方法详解 牛顿的插值方法涉及两个步骤:计算系数,随后评估多项式. 如果插值运作良好使用相同的多项式在x的不同值处重复执行. 要是一点是内插,一种单步计算插值的方法,如Nevi ...