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

Oracle 19C 使用DBMS_STATS恢复优化器统计信息

原创 Asher.HU 2021-02-04
1229


您可以使用以下DBMS_STATS.RESTORE_*_STATS过程还原统计信息

下表中列出的过程接受时间戳记作为参数,并恢复指定时间(as_of_timestamp)的统计信息

表16-1 DBMS_STATS还原过程

程序描述

RESTORE_DICTIONARY_STATS

所有字典表的还原统计数据(的表SYSSYSTEMRDBMS组分模式),其为指定时间戳记。

RESTORE_FIXED_OBJECTS_STATS

从指定的时间戳恢复所有固定表的统计信息。

RESTORE_SCHEMA_STATS

从指定的时间戳恢复模式的所有表的统计信息。

RESTORE_SYSTEM_STATS

从指定的时间戳恢复系统统计信息。

RESTORE_TABLE_STATS

从指定的时间戳恢复表的统计信息。该过程还可以恢复关联索引和列的统计信息。如果表统计信息已锁定在指定的时间戳记,则该过程将锁定统计信息。

词典视图显示统计信息的修改时间。您可以使用以下视图来确定要用于还原操作的时间戳记

  • DBA_OPTSTAT_OPERATIONS视图包含使用模式在模式和数据库级别执行的统计信息操作的历史记录DBMS_STATS
  • DBA_TAB_STATS_HISTORY视图包含表统计信息修改的历史记录。

假设条件

本教程假定以下内容:

  • 在收集oe.orders表的最新统计信息之后,优化器开始为该表的查询选择次优计划。
  • 您想从最近的统计信息收集之前还原统计信息,以查看计划是否有所改善。

要恢复优化器统计信息:

  1. 启动SQL * Plus,并以管理员权限连接到数据库。
  2. 查询的统计历史记录oe.orders

    例如,运行以下查询:

    COL TABLE_NAME FORMAT a10
    SELECT TABLE_NAME,
           TO_CHAR(STATS_UPDATE_TIME,'YYYY-MM-DD:HH24:MI:SS') AS STATS_MOD_TIME
    FROM   DBA_TAB_STATS_HISTORY 
    WHERE  TABLE_NAME='ORDERS'
    AND    OWNER='OE'
    ORDER BY STATS_UPDATE_TIME DESC;
    

    示例输出如下:

    TABLE_NAME STATS_MOD_TIME
    ---------- -------------------
    ORDERS     2012-08-20:11:36:38
    ORDERS     2012-08-10:11:06:20
    
  3. 将优化器统计信息还原到先前的修改时间。

    例如,将oe.orders表统计信息还原到2012年8月10日:

    BEGIN
      DBMS_STATS.RESTORE_TABLE_STATS( 'OE','ORDERS', 
                   TO_TIMESTAMP('2012-08-10:11:06:20','YYYY-MM-DD:HH24:MI:SS') );
    END;
    /
    

    您可以指定8/10到8/20之间的任何日期,因为它将DBMS_STATS恢复指定时间的统计信息。

也可以看看:

Oracle Database PL / SQL软件包和类型参考,以了解有关该DBMS_STATS.RESTORE_TABLE_STATS过程的 更多信息


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

评论