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

Oracle 19C 维护分区维护操作的增量统计信息

原创 Asher.HU 2021-02-04
588

分区维护操作是一个分区相关的操作,诸如添加,交换,合并,或分裂表的分区。

Oracle数据库为增量统计信息维护提供以下支持:

  • 如果分区维护操作触发了统计信息收集,那么数据库可以重用以前与旧段一起删除的概要。
  • DBMS_STATS可以在未分区的表上创建大纲。概要使数据库能够在分区交换操作中维护增量统计信息,而不必在交换后显式收集分区上的统计信息。


当在表上DBMS_STATS首选项INCREMENTAL设置为true时;  

 INCREMENTAL_LEVEL首选项控制收集哪些摘要以及何时收集 ,此首选项采用以下值:

  • TABLE :  DBMS_STATS在此表上收集表级概要。您只能设置INCREMENTAL_LEVELTABLE在表级别,而不是在架构,数据库,或全球水平。
  • PARTITION (默认) :  DBMS_STATS 仅在分区表的分区级别收集摘要。

当执行一个分区交换,以具有提要该分区的交换被交换后,设置INCREMENTALtrueINCREMENTAL_LEVELTABLE在表上与分隔交换。


假设条件

本教程假定以下内容:

  • 您要p_sales_01_2010sales表中加载空分区
  • 您创建一个临时表t_sales_01_2010,然后填充该表。
  • 您希望数据库在分区交换操作中维护增量统计信息,而不必在交换后显式收集分区上的统计信息。


维护增量统计信息作为分区交换操作的一部分:

  1. 为登台表设置增量统计信息首选项t_sales_01_2010

    例如,运行以下语句:

    BEGIN
      DBMS_STATS.SET_TABLE_PREFS (   
          ownname  =>  'sh'
    ,     tabname  =>  't_sales_01_2010'
    ,     pname    =>  'INCREMENTAL'
    ,     pvalue   =>  'true'
    ); 
      DBMS_STATS.SET_TABLE_PREFS (  
          ownname  =>  'sh'
    ,     tabname  =>  't_sales_01_2010'
    ,     pname    =>  'INCREMENTAL_LEVEL'
    ,     pvalue   =>  'table'
    );
    END;
    
  2. 收集登台表的统计信息t_sales_01_2010

    例如,运行以下PL / SQL代码:

    BEGIN
      DBMS_STATS.GATHER_TABLE_STATS ( 
          ownname  => 'SH'
    ,     tabname  => 'T_SALES_01_2010'
    );
    END;
    /
    

    DBMS_STATS在上收集表级摘要t_sales_01_2010

  3. 确保INCREMENTAL首选项truesh.sales表中。

    例如,运行以下PL / SQL代码:

    BEGIN
      DBMS_STATS.SET_TABLE_PREFS (
          ownname  =>  'sh'
    ,     tabname  =>  'sales'
    ,     pname    =>  'INCREMENTAL'
    ,     pvalue   =>  'true'
    );
    END;
    /
    
  4. 如果你还没有收集到sh.sales的统计数据与之前INCREMENTAL设置为true,然后收集分区的统计数据进行交换。

    例如,运行以下PL / SQL代码:

    BEGIN
      DBMS_STATS.GATHER_TABLE_STATS (
          ownname  =>  'sh'
    ,     tabname  =>  'sales'
    ,     pname    =>  'p_sales_01_2010'
    ,     pvalue   =>  granularity=>'partition'
    );
    END;
    /
    
  5. 执行分区交换。

    例如,使用以下SQL语句:

    ALTER TABLE sales EXCHANGE PARTITION p_sales_01_2010 WITH TABLE t_sales_01_2010;
    

    交换之后,分区表既有统计信息,又有partitionion的提要p_sales_01_2010

    在之前版本的Oracle数据库12c中,上面的语句交换段数据和统计p_sales_01_2010t_sales_01_2010该数据库未维护未分区表(例如)的概要t_sales_01_2010要在分区表上收集全局统计信息,您需要重新扫描p_sales_01_2010分区以获得其概要。

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

评论