标签:ora 查询 sys ati use 两种 gravity last 方式
select GLOBAL_STATS from user_indexes where index_name=index_name;
LOBAL_STATS:
>对于分区表,指示是否收集了统计信息
>是针对整个表(YES)还是从统计信息中估计的
>基础分区和子分区(NO)
分区表里global_stats=YES的全局统计信息是否准确关系到optimizer能否选择较优的执行计划,对分区表执行全局统计会不可避免的产生FTS加重系统负担,尤其对于DW环境里规模较大的分区表而言更是如此。
global_stats这个代表该分区表是否对该分区进行了统计分析,一般情况下,系统在不知道什么时候都会对这分区就行统计分析的。而对这个分区进行统计分析又包含了两种方式,非incremental方式,incremental方式,而非incremental方式会进行全量扫描分区表中所有的分区,incremental方式则会增量扫描分区表中的分区。
incremental statistics collect正是在这一背景下应运而生,简单的说incremental statistics collect会实时记录分区表里每个partition每列值的更新情况,这一信息保存在SYSAUX表空间里,后续根据这一信息在执行全局统计时仅会针对有变化的partition进行statistics collect,并将收集的结果与没有变化过的partition原有的统计信息进行整合,计算出准确的global stats,省去了必须去扫描每一个partition的步骤。
非incremental方式下新加分区后对整个分区表收集统计信息,会全量扫描分区表中所有的分区,即使那些没有改变过的分区也会被重新扫描一遍
//查看分区表下有多少个分区
select table_name,count(*) from dba_tab_partitions group by table_name order by 2 desc;
//查看该表统计偏好
select dbms_stats.get_prefs(‘granularity‘,‘system‘,‘SALES‘) from dual;
//查看分析后global与partition级的统计信息
select num_rows,blocks,last_analyzed from dba_tables where table_name=‘SALES‘;
//重新收集global统计
exec DBMS_STATS.gather_table_stats(ownname=>‘SYSTEM‘,tabname => ‘SALES‘);
Oracle分区表中global_stats=YES global_stats=FALSE影响查询效率
标签:ora 查询 sys ati use 两种 gravity last 方式
原文地址:https://www.cnblogs.com/xhomex/p/13659213.html