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)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM