分区表的增量统计信息收集
分区表的统计信息存在global和partition级别两种。在收集分区表的全局统计信息的时候,不可避免的要对表的所有分区进行统计,但是由于表分区的初衷,不同分区数据变化情况很可能不一致。那么极容易出现有的分区统计信息是准的,有的分区是不准的,扫描所有分区必然造成资源多余消耗,增量收集统计信息功能就可以解决这个问题了。该功能只针对有变化的分区收集统计信息,然后将其与没有变化的分区的统计信息做合并,得到完整的表的统计信息。
scott下面恰好存在一张以前做实验的分区表
SQL> select table_owner,table_name,partition_name,tablespace_name from dba_tab_partitions where table_owner='SCOTT' and table_name='CMP';
TABLE_OWNER TABLE_NAME PARTITION_NAME TABLESPACE_NAME
------------- ------------ ------------------- -------------------
SCOTT CMP YY1_TMP YY1
SCOTT CMP YY2_TMP YY2
SCOTT CMP YY3_TMP YY3
SCOTT CMP T_RANGE_PMAX_TMP YY4
SQL> select count(*) from cmp;
COUNT(*)
----------
4000
查看当前的全局统计信息
SQL> select table_name,num_rows,last_analyzed from dba_tables where table_name='CMP';
TABLE_NAME NUM_ROWS LAST_ANALYZED
------------------------------ ---------- -------------------
CMP 4000 2017-10-24 22:00:13
当前的分区级别统计信息
SQL> select table_name,partition_name,num_rows,last_analyzed from dba_tab_partitions where table_name='CMP';
TABLE_NAME PARTITION_NAME NUM_ROWS LAST_ANALYZED
-------------------- ------------------------------ ---------- -------------------
CMP YY1_TMP 999 2017-10-24 22:01:17
CMP YY2_TMP 1000 2017-10-24 22:01:17
CMP YY3_TMP 1000 2017-10-24 22:01:17
CMP T_RANGE_PMAX_TMP 1001 2017-10-24 22:01:17
可以看到统计信息很陈旧了。我先收集其中一个分区的统计信息,作为对比。
exec dbms_stats.gather_table_stats(ownname=>'scott',tabname=>'cmp',partname=>'YY1_TMP');
PL/SQL procedure successfully completed.
收集一个分区后的全局和分区统计信息
SQL> select table_name,num_rows,last_analyzed from dba_tables where table_name='CMP';
TABLE_NAME NUM_ROWS LAST_ANALYZED
-------------------- ---------- -------------------
CMP 4000 2018-09-12 05:28:45
SQL> select table_name,partition_name,num_rows,last_analyzed from dba_tab_partitions where table_name='CMP';
TABLE_NAME PARTITION_NAME NUM_ROWS LAST_ANALYZED
-------------------- ------------------------------ ---------- -------------------
CMP YY1_TMP 999 2018-09-12 05:28:45
CMP YY2_TMP 1000 2017-10-24 22:01:17
CM
oracle分区表的增量收集统计信息
最新推荐文章于 2023-06-26 10:09:04 发布