暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

12.2 开始如何清除 Optimizer Statistics Advisor 旧的记录

原创 让世界为你转身 2024-11-18
567

1.问题原因

AUTO_STATS_ADVISOR_TASK 和 INDIVIDUAL_STATS_ADVISOR_TASK 两个task导致了表WRI$_ADV_OBJECTS记录大量数据,进而引发SYSAUX 表空间占用大量空间。AUTO_STATS_ADVISOR_TASK 是自动统计信息顾问任务(Automatic Statistics Advisor task),INDIVIDUAL_STATS_ADVISOR_TASK 是手工统计信息顾问任务(Manual Statistics Advisor task)。

DBA_ADVISOR_PARAMETERS 显示所有顾问任务的参数和当前值。其中有一个参数EXECUTION_DAYS_TO_EXPIRE,这个参数指定单位是天。执行信息早于这个天数的记录将会在自动清理窗口期间被自动清理掉。

在12.2.0.1版本上,参数EXECUTION_DAYS_TO_EXPIRE被设定为UNLIMITED,意味着历史数据永远不会被清理。

SQL> col TASK_NAME format a25 SQL> col parameter_name format a35 SQL> col parameter_value format a20 SQL> set lines 120 SQL> select TASK_NAME,parameter_name, parameter_value FROM DBA_ADVISOR_PARAMETERS WHERE task_name='AUTO_STATS_ADVISOR_TASK' and PARAMETER_NAME='EXECUTION_DAYS_TO_EXPIRE'; TASK_NAME PARAMETER_NAME PARAMETER_VALUE ------------------------- ----------------------------------- -----------

2.处理方法

对于12.2.0.1,下载 Patch 30138470 12.2.0.1.191015 (Oct 2019) Database Release Update (DB RU) 或者更高版本来修复上述两个未公开bug。 对于18c,下载 Patch 28822489 18.5.0.0.190115 (Jan 2019) Database Release Update (DB RU) 或更高版本来修复。对于19C,这俩bug已经修复了,无需任何补丁。
但需要注意:

19c虽然不需要应用补丁,便可以修改保留时间,但存在新的问题:cdb可以自动清理,pdb存在bug,无法自动清理。

应用了补丁修复了上述的未公开bug后,可以考虑使用下面的任何一个选项来修复历史数据清理问题:

  • 方法1:自动清理
    设定参数EXECUTION_DAYS_TO_EXPIRE为30(默认)天,所有历史数据超过30天的都会被标记成过期,自动清理job将会清理这些过期数据。如果数据过多,可能一个清理窗口内无法完成,但是经过一些天之后,这些过期数据就会逐渐的被清理完毕。
  • 方法2:手工清理
    这些过期数据可以通过下面手工的方式进行清理
--清理超过30天的数据 SQL> conn / as sysdba SQL> exec prvt_advisor.delete_expired_tasks;

19c存在新的bug:

在多租户(CDB/PDB)环境 下,即使打了上述的DBRU修复了bug,但是会出现PDB里面的过期数据仍然没有被清理情况,您可以通过手工的方法来清理PDB里的数据,CDB的数据会自动清理。如下未公开的增强补丁来修复PDB 里面EXECUTION_DAYS_TO_EXPIRE不生效的问题。 <Unpublished> ENH 31028071 - PURGE EXPIRED AUTO_STATS_ADVISOR_TASK DATA IN PDB
  • 方法3:定制清理
    如果默认的30天保留时间不能满足SYSAUX的剩余空间要求,您可以调整参数EXECUTION_DAYS_TO_EXPIRE更小,例
    如10(天),这样历史数据将会进一步清理。
SQL> EXEC DBMS_ADVISOR.SET_TASK_PARAMETER(task_name=> 'AUTO_STATS_ADVISOR_TASK', parameter=> 'EXECUTION_DAYS_TO_EXPIRE', value => 10); 或者 SQL> EXEC DBMS_SQLTUNE.SET_TUNING_TASK_PARAMETER (task_name => 'AUTO_STATS_ADVISOR_TASK', parameter => 'EXECUTION_DAYS_TO_EXPIRE', value => 10);

如果配置了 INDIVIDUAL_STATS_ADVISOR_TASK 并且存在太多记录,则还可以调整 EXECUTION_DAYS_TO_EXPIRE 参数值。

SQL> select TASK_NAME,parameter_name, parameter_value FROM DBA_ADVISOR_PARAMETERS WHERE task_name='AUTO_STATS_ADVISOR_TASK' and PARAMETER_NAME='EXECUTION_DAYS_TO_EXPIRE'; TASK_NAME PARAMETER_NAME PARAMETER_VALUE ------------------------- ----------------------------------- -------------------- AUTO_STATS_ADVISOR_TASK EXECUTION_DAYS_TO_EXPIRE 10

现在,所有的统计信息顾问咨询记录若是早于10天的,都会被标记成过旧,而且会再自动清理窗口期间被自动清理掉。

最后修改时间:2024-11-18 11:22:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论