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

Oracle 19C 使用动态统计信息收集易失表的统计信息

原创 Asher.HU 2021-02-04
574


易失性表的统计信息很快就会过时。例如,一个表可以删除或截断,然后重建。

将易失性对象的统计信息设置为null时,Oracle数据库将在优化过程中使用动态统计信息动态收集必要的统计信息。OPTIMIZER_DYNAMIC_SAMPLING初始化参数控制此功能。

假设条件

本教程假定以下内容:

  • oe.orders表非常不稳定。
  • 您想要删除然后锁定orders上的统计信息,以防止数据库收集表上的统计信息。这样,数据库可以动态收集必要的统计信息,作为查询优化的一部分。
  • oe用户拥有必要的权限查询DBMS_XPLAN.DISPLAY_CURSOR


要删除和锁优化器统计信息:

  1. 以用户身份连接到数据库oe,然后删除oe的统计信息

    例如,执行以下过程:

    BEGIN
      DBMS_STATS.DELETE_TABLE_STATS('OE','ORDERS');
    END;
    /
    
    复制
  2. 锁定oe的统计信息

    例如,执行以下过程:

    BEGIN
      DBMS_STATS.LOCK_TABLE_STATS('OE','ORDERS');
    END;
    /
    
    复制
  3. 您查询orders表。

    例如,使用以下语句:

    SELECT COUNT(order_id) FROM orders;
    
    复制
  4. 您在光标中查询计划。

    您运行以下命令(包括部分输出):

    SET LINESIZE 150
    SET PAGESIZE 0
    
    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR);
    
    SQL_ID  aut9632fr3358, child number 0
    -------------------------------------
    SELECT COUNT(order_id) FROM orders
     
    Plan hash value: 425895392
     
    ---------------------------------------------------------------------
    | Id  | Operation          | Name   | Rows  | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |        |       |     2 (100)|          |
    |   1 |  SORT AGGREGATE    |        |     1 |            |          |
    |   2 |   TABLE ACCESS FULL| ORDERS |   105 |     2   (0)| 00:00:01 |
    ---------------------------------------------------------------------
     
    Note
    -----
       - dynamic statistics used for this statement (level=2)
    
    复制

    前面的执行计划中的“注释”表明数据库使用了该SELECT语句的动态统计信息

也可以看看:

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

评论