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

Oracle 19C 收集分区表的统计信息:基本步骤

原创 Asher.HU 2021-02-04
3237
13.3.8.3.1增量统计信息维护的注意事项

启用增量统计信息维护会带来多种后果。

具体来说,请注意以下几点:

  • 如果表使用复合分区,则数据库仅收集有关已修改子分区的统计信息。数据库不会在子分区级别收集未修改子分区的统计信息。这样,数据库通过跳过未修改的分区来减少工作量。
  • 如果表使用增量统计信息,并且该表具有本地分区索引,则数据库将在全局级别和已修改(未修改)索引分区上收集索引统计信息。数据库不会从分区级索引统计信息中生成全局索引统计信息。而是,数据库通过执行完整索引扫描来收集全局索引统计信息
  • 混合分区表:(一个表,其中一些分区存储在数据文件段中,而某些分区存储在外部数据源中)中含有内部和外部分区。仅对于内部分区,DDL更改会在单个分区和表本身上调用增量统计信息维护。例如,如果june18是内部分区,则ALTER TABLE ... MODIFY PARTITION jun18 ...在统计信息收集期间触发增量统计信息维护;如果june18是外部分区,则不会进行增量维护。
  • SYSAUX表空间占用额外的空间来维持分区表全局统计信息。

也可以看看:


13.3.8.3.2使用SET_TABLE_PREFS 启用增量统计

要为分区表启用增量统计信息维护,请使用DBMS_STATS.SET_TABLE_PREFS将该INCREMENTAL设置trueINCREMENTAL设置为时false,这是默认值,数据库使用全表扫描来维护全局统计信息。


为了使数据库通过扫描已更改的分区来增量更新全局统计信息,必须满足以下条件:
  • PUBLISH对分区表值true
  • INCREMENTAL对分区表值true
  • 统计数据收集程序必须指定 ESTIMATE_PERCENT 值为AUTO_SAMPLE_SIZE 
                            GRANULARITY     值为  AUTO   (即默认值)


示例13-3启用增量统计

假设PUBLISH分区表的sh.sales值为true以下程序为该表启用增量统计信息:

EXEC DBMS_STATS.SET_TABLE_PREFS('sh', 'sales', 'INCREMENTAL', 'TRUE');


13.3.8.3.3关于APPROXIMATE_NDV_ALGORITHM设置

所述DBMS_STATS.APPROXIMATE_NDV_ALGORITHM  偏好指定提要生成算法,无论是HyperLogLog或自适应采样。

INCREMENTAL_STALENESS首选项控制数据库何时重新格式化使用自适应采样格式的大纲。

APPROXIMATE_NDV_ALGORITHM偏好具有以下可能值:
  • REPEAT OR HYPERLOGLOG  : 这是默认值。如果在表上启用INCREMENTAL,则数据库将保留使用自适应采样算法的任何现有提要的格式。但是,数据库以HyperLogLog格式创建任何新的概要。当现有性能可接受时,并且您不想承担重新格式化旧内容的性能成本时,此方法很有吸引力。
  • ADAPTIVE SAMPLING数据库对所有概要使用自适应采样算法。这是最保守的选择。
  • HYPERLOGLOG :       该数据库对所有新的和过时的摘要使用HyperLogLog算法。


INCREMENTAL_STALENESS优先控制时,大纲被认为是过时的。APPROXIMATE_NDV_ALGORITHM设置HYPERLOGLOG时,将首选 项INCREMENTAL_STALENESS设置以下值:

  • ALLOW_MIXED_FORMAT :这是默认值。如果指定此值,如果满足以下条件,则数据库并不会考虑现有的自适应采样梗概为失效:
    • 概要是新鲜的,未过时的。
    • 手动收集统计信息

    因此,传统和HyperLogLog格式的概要都可以共存。但是,随着时间的流逝,自动统计信息收集作业会重新收集有关使用旧格式的概要的统计信息,并将其替换为HyperLogLog格式的概要。这样,自动统计信息收集作业将逐步淘汰旧格式。手动统计信息收集作业不会重新格式化使用自适应采样格式的概要。

  • 空值 :          具有概要格式的概要的任何分区都被视为陈旧的,这立即触发数据库以收集统计信息以获取陈旧的概要。
                      优点是性能成本仅发生一次。缺点是在大型表上收集所有统计信息可能会占用大量资源。


13.3.8.3.4配置摘要生成:示例

这些示例显示了将概要切换到新的HyperLogLog格式的不同方法,既保守又激进。

示例13-4采取保守方法重新格式化概要

在此示例中,您允许sh.sales表的混合格式的大纲共存混合格式产生的统计数据准确性较低。但是,你需要为表的所有分区regather统计。

为确保所有新的和过时的提要都使用HyperLogLog算法,请将APPROXIMATE_NDV_ALGORITHM首选项设置HYPERLOGLOG

确保自动统计信息收集作业随着时间的推移逐渐重新格式化过时的摘要,请将设置INCREMENTAL_STALENESSALLOW_MIXED_FORMAT

BEGIN
  DBMS_STATS.SET_TABLE_PREFS
    (   ownname => 'sh'
    ,   tabname => 'sales'
    ,   pname   => 'approximate_ndv_algorithm'
    ,   pvalue  => 'hyperloglog' );

  DBMS_STATS.SET_TABLE_PREFS
    (  ownname  => 'sh'
    ,  tabname  => 'sales'
    ,  pname    => 'incremental_staleness'
    ,  pvalue   => 'allow_mixed_format' );
END;


示例13-5:采用积极的方法重新格式化概要

在此示例中,您强制所有概要对表使用HyperLogLog算法sh.sales在这种情况下,数据库必须收集表的所有分区的统计信息。

为确保所有新的和过时的提要都使用HyperLogLog算法,请将APPROXIMATE_NDV_ALGORITHM首选项设置HYPERLOGLOG

强制数据库立即 重新收集表中所有分区的统计信息并以新格式存储它们,请将INCREMENTAL_STALENESS首选项设置为null。

BEGIN
  DBMS_STATS.SET_TABLE_PREFS
    (   ownname => 'sh'
    ,   tabname => 'sales'
    ,   pname   => 'approximate_ndv_algorithm'
    ,   pvalue  => 'hyperloglog' );

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

评论