博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WRI$_ADV_OBJECTS表过大,导致PDB的SYSAUX表空间不足
阅读量:2042 次
发布时间:2019-04-28

本文共 3485 字,大约阅读时间需要 11 分钟。

现象

监控发现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删除。

在删除任务的过程中,可能会遇到下面的错误:

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)可以在任何时刻进行重建 

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)

转载地址:http://vcsof.baihongyu.com/

你可能感兴趣的文章
不是技术人员也能看懂云计算、大数据、人工智能
查看>>
图解HTTP(三)—— HTTP报文内的HTTP信息
查看>>
图解HTTP(四)—— 返回结果的HTTP状态码
查看>>
JavaWeb高级编程(五)—— 使用会话来维持HTTP状态
查看>>
Intellij IDEA使用(十五)—— 如何在IDEA中一个Tomcat启动多个项目和多个Tomcat启动多个项目
查看>>
图解HTTP(五)—— 与HTTP协作的Web服务器
查看>>
程序员的数学(五)—— 排列组合,解决计数问题的方法
查看>>
前后端分离实践(四)—— 使用vue-cli搭建前端展示层并用mock模拟测试数据
查看>>
前后端分离实践(六)—— 前端与后端在生产环境中的分离部署
查看>>
启航 —— 记 —— 第二次自考的反思:自考与自我改造的困境
查看>>
数据结构与算法(三)——线性表
查看>>
Java8学习笔记(一)—— 函数式编程的四个基本接口
查看>>
Java8学习笔记(二)—— Lambda表达式
查看>>
Java8学习笔记(三)—— Optional类的使用
查看>>
Java8学习笔记(四) —— Stream流式编程
查看>>
Java8学习笔记(五)—— 方法引用(::双冒号操作符)
查看>>
数据结构与算法(四)—— 栈与队列
查看>>
数据结构与算法(五)—— 广义表
查看>>
微服务简介
查看>>
CAP定理
查看>>