现象
监控发现sysaux表空间使用不断增加,导致表空间不足

查看过程

查看版本:

  1. SQL> select * from v$version;
  2.  
  3. BANNER CON_ID
  4. -------------------------------------------------------------------------------- ----------
  5. Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
  6. PL/SQL Release 12.2.0.1.0 - Production 0
  7. CORE 12.2.0.1.0 Production 0
  8. TNS for Linux: Version 12.2.0.1.0 - Production 0
  9. NLSRTL Version 12.2.0.1.0 - Production 0
  10.  
  11. SQL>

查看v$sysaux_occupants,发现SM/ADVISOR排在第一

  1. SQL> set lines 120
  2. SQL> col occupant_name format a30
  3. SQL> select occupant_name,space_usage_kbytes from v$sysaux_occupants order by space_usage_kbytes desc;

查看dba_segments,发现WRI$_ADV_OBJECTS占用最大

  1. SQL> col segment_name format a30
  2. SQL> col owner format a10
  3. SQL> col tablespace_name format a10
  4. SQL> col segment_type format a15
  5. 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表空间。

  1. SQL> col task_name format a35
  2. SQL> select task_name, count(*) cnt from dba_advisor_objects group by task_name order by cnt desc;
  3.  
  4. TASK_NAME CNT
  5. ----------------------------------- ----------
  6. SYS_AUTO_SQL_TUNING_TASK 20703
  7. AUTO_STATS_ADVISOR_TASK 9881

  

解决方案

方案1.删除statistics advisor task(auto_stats_advisor_task),删除该任务后就可以释放统计信息顾问产生的数据

直接删除该任务:

  1. declare
  2. v_tname varchar2(32767);
  3. begin
  4. v_tname := 'AUTO_STATS_ADVISOR_TASK';
  5. dbms_stats.drop_advisor_task(v_tname);
  6. end;
  7. /

一旦任务被删除,与任务相关的结果数据都会从表WRI$_ADV_OBJECTS删除。
在删除任务的过程中,可能会遇到下面的错误:

  1. ORA-20001: Statistics Advisor: Invalid Task Name For the current user

如果遇到上面的错误,可以先重建AUTO_STATS_ADVISOR_TASK来解决问题:

  1. SQL> connect / as sysdba
  2. SQL> EXEC DBMS_STATS.INIT_PACKAGE();

删除任务后,重新组织表和索引

  1. SQL> alter table wri$_adv_objects move;
  2. SQL> alter index wri$_adv_objects_idx_01 rebuild;
  3. SQL> alter index wri$_adv_objects_pk rebuild;

方案2.如果表WRI$_ADV_OBJECTS比较大,删除任务AUTO_STATS_ADVISOR_TASK会需要很多的undo表空间
可以通过以下方式purge数据,不会过度的产生redo/undo数据

  1. ### Check the no.of rows in WRI$_ADV_OBJECTS for Auto Stats Advisor Task ###
  2. SQL> select count(*) from wri$_adv_objects where task_id=(select distinct id from wri$_adv_tasks where name='AUTO_STATS_ADVISOR_TASK');
  3.  
  4. COUNT(*)
  5. ----------
  6. 46324479
  7.  
  8. ### Do CTAS from WRI$_ADV_OBJECTS to keep the rows apart from AUTO_STATS_ADVISOR_TASK ###
  9. 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');
  10. SQL> select count(*) from wri$_adv_objects_new;
  11.  
  12. COUNT(*)
  13. ----------
  14. 359
  15.  
  16. ### Truncate the table ###
  17. SQL> truncate table wri$_adv_objects;
  18.  
  19. ### Insert the rows from backed up table WRI$_ADV_OBJECTS_NEW to restore the records of ther advisor objects ###
  20. SQL> insert /*+ APPEND */ into wri$_adv_objects select * from wri$_adv_objects_new;
  21. SQL> commit;
  22. SQL> drop table wri$_adv_objects_new;
  23.  
  24. ### Reorganize the indexes ###
  25. SQL> alter index wri$_adv_objects_idx_01 rebuild;
  26. SQL> alter index wri$_adv_objects_pk rebuild;

  

其它

重建AUTO_STATS_ADVISOR_TASK

Optimizer Statistics Advisor Task (AUTO_STATS_ADVISOR_TASK)可以在任何时刻进行重建

  1. SQL> EXEC DBMS_STATS.INIT_PACKAGE();

 

也可以禁用该任务,而不是删除

  1. declare
  2. filter1 clob;
  3. begin
  4. filter1 := dbms_stats.configure_advisor_rule_filter('AUTO_STATS_ADVISOR_TASK',
  5. 'EXECUTE',
  6. NULL,
  7. 'DISABLE');
  8. END;
  9. /

  

参考文档: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表空间不足的更多相关文章

  1. 【Spark调优】大表join大表,少数key导致数据倾斜解决方案

    [使用场景] 两个RDD进行join的时候,如果数据量都比较大,那么此时可以sample看下两个RDD中的key分布情况.如果出现数据倾斜,是因为其中某一个RDD中的少数几个key的数据量过大,而另一 ...

  2. 转 listener.log文件过大导致oracle数据库连接非常慢

    数据库(31)  最近发现oracle数据库连接非常慢,sqlplus很快,用客户端就很慢,甚至会无响应. 然后服务器内存一下就飙升到了90%,不是表空间占满了,也不是数据库连接数占满了.重启还是一样 ...

  3. 分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据

    分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据 今天开发找我,说数据库insert不进数据,叫我看一下 他发了一个截图给我 然后我登录上服务器,发现了可疑的地方,而且这个数据库之前 ...

  4. 解决父类加载iframe,src参数过大导致加载失败

    原文:解决父类加载iframe,src参数过大导致加载失败 <iframe src="*******.do?param=****" id="leftFrame&qu ...

  5. 【Spark调优】小表join大表数据倾斜解决方案

    [使用场景] 对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(例如几百MB或者1~2GB),比较适用此方案. [解决方案] ...

  6. 小表驱动大表, 兼论exists和in

    给出两个表,A和B,A和B表的数据量, 当A小于B时,用exists select * from A where exists (select * from B where A.id=B.id) ex ...

  7. Oracle 监听器日志文件过大导致监听异常

    Oracle 监听器日志文件过大导致监听异常 db版本:11.2.0.1 os版本:windows2008 现象: 应用异常,无法连接数据库.登陆数据库服务器,查看监听已经断掉.尝试重启监听,重启失败 ...

  8. 顺序线性表之大整数求和C++

    顺序线性表之大整数求和 大整数求和伪代码 1.初始化进位标志 flag=0: 2.求大整数 A 和 B 的长度: int aLength = a.GetLength(); int bLength = ...

  9. 【经验随笔】MYSQL表加锁升级导致数据库访问失败

    背景:有一次定位问题发现,在同一个session连接中对MYSQL部分表加锁,导致其它未加锁的表不能访问. 用Spring管理MYSQL数据连接,在多线程访问数据库的情况下容易出问题.一个线程中对部分 ...

随机推荐

  1. [转] Optimizely:在线网站A/B测试平台

    Optimizely:在线网站A/B测试平台是一家提供 A/B 测试服务的公司.A/B 测试能够对比不同版本的设计,选取更吸引用户眼球的那一款,从而带来更为优化的个人体验.让网站所有者易于对不同版本的 ...

  2. Codeforces 269C Flawed Flow (看题解)

    我好菜啊啊啊.. 循环以下操作 1.从队列中取出一个顶点, 把哪些没有用过的边全部用当前方向. 2.看有没有点的入度和 == 出度和, 如果有将当前的点加入队列. 现在有一个问题就是, 有没有可能队列 ...

  3. Redis数据结构之字符串

    学习阶段分成两个部分,一个是redis客户端,一个是java客户端操作 一:在redis客户端操作 1.先删除里面的几个key 2.set与get与getset 3.数值的增减 值递增1,或者减一 如 ...

  4. codeforces 366C Dima and Salad 【限制性01背包】

    <题目链接> 题目大意: 在一个水果篮里有n种水果,并且这些水果每一种都有一个美味度和一个卡路里的属性, 小明要从这些水果中选出来一些做一个水果沙拉, 并且要求他的水果沙拉的美味度是卡路里 ...

  5. Linux学习之文件系统常用命令(七)

    Linux文件系统常用命令 目录 df命令 du命令 fsck命令 dump2fs命令 df命令 df命令 统计文件系统的占有情况,分区用了多少空间,还剩多少空间 df [选项] [挂载点] 选项: ...

  6. Java线程池深入理解

    之前面试baba系时遇到一个相对简单的多线程编程题,即"3个线程循环输出ADC",自己答的并不是很好,深感内疚,决定更加仔细的学习<并发编程的艺术>一书,到达掌握的强度 ...

  7. shell 环境变量

    Ubuntu系统设置的环境变量 .profile .bashrc 在 .profile中 有一段代码: if [ -d "$HOME/bin" ] ; then PATH=&quo ...

  8. scikit-learn全局图

    https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html

  9. Python HTTP 请求时对重定向中的 cookie 的处理

    首先说明一下,我使用的是 Python3 的 urllib,但 Python2.x 同理(使用 urllib2). 想用脚本去登录一个网站.和很多网站一样,该网站使用 cookie 来保存会话信息.这 ...

  10. 数值分析之Neville's Algorithm

        Neville插值方法详解 牛顿的插值方法涉及两个步骤:计算系数,随后评估多项式. 如果插值运作良好使用相同的多项式在x的不同值处重复执行. 要是一点是内插,一种单步计算插值的方法,如Nevi ...