db2 統計信息 runstats


1.runstats的語法:
runstats on table [模式名].[表名] with distribution and detailed indexes all
注意:你可以在所有列上,或者僅僅在某些列或列組(除了LONG和LOB列)上執行RUNSTATS。
如果沒有指定特定列的子句,系統則會使用默認的ON ALL COLUMNS子句。
使用RUNSTATS WITH DISTRIBUTION
當您已確定表中包含不是統一分布的數據時,可以運行包含WITH DISTRIBUTION子句的RUNSTATS。
目錄統計信息表通常包含關於表中最高和最低值的信息,而優化器假定數據值是在兩個端點值之間均勻分布的。
然而,如果數據值彼此之間差異較大,或者群集在某些點上,或者是碰到許多重復的數據值,
那么優化器就無法選擇一個最佳的訪問路徑,除非收集了分布統計信息。
使用WITH DISTRIBUTION子句還可以幫助查詢處理沒有參數標志符(parameter marker)或主機變量的謂詞,
因為優化器仍然不知道運行時的值是有許多行,還是只有少數行。
如果為單一索引進行runstats,可以使用:
runstats on table [模式名].[表名] for indexes [索引名]

2.runstats的作用:
一個SQL在寫完並運行之后,其實我們只是告訴了DB2去做什么,而不是如何去做。
而,具體的如何去做,就取決於優化器。優化器為了生成最優的執行計划,就得掌握當前的系統信息,目錄中的統計信息等等。
runstats命令就是用來收集數據庫對象的狀態信息,這對優化器生成最優的執行計划至關重要。

3.什么時候需要runstats:
·在給表創建一個index后,我們最好做一次runstat,否則可能index沒有生效。不過有說法稱在8.2版本以后的DB2中,會在INDEX之后自動進行runstats;
·.在對table做了一次reorg后,記得要做一次runstats。因為對表做reorg,會修改表的很多信息,比如高水位等,所以做一次runstats,可以更新統計信息。
·當表里數據發生了比較大的變化,一般來說,大約表里面的數據量的10%-20%發生了變化,就應該作一次runstats。這些變化包括刪除,修改,插入。
     對於一些非常大的表,比方在數據倉庫的項目里面,某些事實表非常巨大。這個時候,完整的對一個大表作runstats可能花費時間相當大,
     DB2 8.1里面支持我們對這些大表作抽樣,比方說只對20%的數據作runstats,這樣的話,一般來說也能保證得到正確的執行計划。
     當然首先要確保這個表里面的數據最好分布比較均勻。
·.當你在分區(DPF)數據庫里面使用了REDISTRIBUTE DATABASE PARTITION GROUP這個命令,那么就需要用runstats來收集新的統計信息。

4.其他
當表比較小的時候,runstats是一件很普通的事情。但是當表非常大的時候,runstats將會占用相當大的時間,cpu和內存。
通常只在關鍵查詢的速度開始減慢時,管理員才會對RUNSTATS給予適當的注意。
您可以通過制定高效、有效收集統計信息的策略,避免未經思考就調優查詢和執行RUNSTATS。


免責聲明!

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



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