Oracle分區表中global_stats=YES global_stats=FALSE影響查詢效率


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');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM