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

Oracle 19C 维护具有过期或锁定分区统计信息的表的增量统计信息

原创 Asher.HU 2021-02-04
1305

Oracle Database 12c开始,增量统计信息可以自动计算分区表的全局统计信息,即使分区统计信息或子分区统计信息已过时并已锁定也是如此。

Oracle Database 12c之前的版本中启用增量统计信息时,如果分区上发生任何DML,则优化器将认为该分区上的统计信息是陈旧的。因此,DBMS_STATS必须再次收集统计信息以准确汇总全局统计信息。此外,如果DML发生在其统计信息已锁定的分区上,则DBMS_STATS无法在该分区上收集统计信息,因此全表扫描是收集全局统计信息的唯一方法。收集统计信息会增加性能开销。


Oracle Database 12c中,统计信息首选项INCREMENTAL_STALENESS控制数据库如何确定分区子分区上的统计信息是否陈旧此首选项采用以下值:

  • USE_STALE_PERCENT

    如果DML更改小于STALE_PERCENT为表指定首选项,则该分区或子分区不会被视为过时的。的默认值STALE_PERCENT10,这意味着如果DML引起的行变化超过10%,则该表被视为失效。

  • USE_LOCKED_STATS

    无论DML更改如何,锁定的分区或子分区统计信息都不会被视为过时的。

  • NULL (默认)

    如果分区或子分区具有任何DML更改,则认为它是陈旧的此行为与Oracle Database 11g行为相同使用默认值时,保证以增量方式收集的统计信息与以非增量方式收集的统计信息相同。使用非默认值时,以增量方式收集的统计信息可能不如以非增量方式收集的统计数据准确。

您可以一起指定USE_STALE_PERCENTUSE_LOCKED_STATS例如,您可以编写以下匿名块:

BEGIN
  DBMS_STATS.SET_TABLE_PREFS (
    ownname     => null
,   table_name  => 't'
,   pname       => 'incremental_staleness'
,   pvalue      => 'use_stale_percent,use_locked_stats'
);
END;


假设条件

本教程假定以下内容:

  • STALE_PERCENT一个分区表被设置为10
  • INCREMENTAL值设置为true
  • 该表以前以INCREMENTAL模式收集过统计信息
  • 您想发现统计信息收集方式如何变化,具体取决于的设置INCREMENTAL_STALENESS,统计信息是否被锁定以及DML的变化百分比。


要测试具有过期或锁定分区统计信息的表,请执行以下操作:

  1. 设置INCREMENTAL_STALENESSNULL

    之后,由于DML活动,一个分区中5%的行发生了变化。

  2. 使用DBMS_STATS收集表的统计信息。

    DBMS_STATS 收集具有5%DML活动的分区的统计信息,并增量维护全局统计信息。

  3. 设置INCREMENTAL_STALENESSUSE_STALE_PERCENT

    之后,由于DML活动,一个分区中5%的行发生了变化。

  4. 使用DBMS_STATS收集表的统计信息。

    DBMS_STATS确实为过DML活动(因为变化是在10%的陈旧程度阈值)分区regather统计,并逐步维护全局统计信息。

  5. 锁定分区统计信息。

    之后,由于DML活动,一个分区中20%的行发生了变化。

  6. 使用DBMS_STATS收集表的统计信息。

    DBMS_STATS确实 regather统计分区,因为统计数据被锁定。数据库通过全表扫描收集全局统计信息。

    之后,由于DML活动,一个分区中5%的行发生了变化。

  7. 使用DBMS_STATS收集表的统计信息。

    当您在此表上收集统计信息时,请DBMS_STATS不要收集该分区的统计信息,因为它们不会被视为过时的。数据库使用此分区的现有统计信息来增量维护全局统计信息。

  8. 设置INCREMENTAL_STALENESSUSE_LOCKED_STATSUSE_STALE_PERCENT

    之后,由于DML活动,一个分区中20%的行发生了变化。

  9. 使用DBMS_STATS收集表的统计信息。

    因为USE_LOCKED_STATS设置了,将DBMS_STATS忽略统计信息过时的事实,并使用锁定的统计信息。数据库使用此分区的现有统计信息来增量维护全局统计信息。

也可以看看:

Oracle Database PL / SQL软件包和类型参考以了解更多信息DBMS_STATS.SET_TABLE_PREFS

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

评论