1.runstats的語法:
runstats on table [模式名].[表名] with distribution and detailed indexes all
注意:你可以在所有列上,或者僅僅在某些列或列組(除了LONG和LOB列)上執(zhí)行RUNSTATS。
如果沒有指定特定列的子句,系統(tǒng)則會使用默認的ON ALL COLUMNS子句。
使用RUNSTATS WITH DISTRIBUTION
當您已確定表中包含不是統(tǒng)一分布的數(shù)據(jù)時,可以運行包含WITH DISTRIBUTION子句的RUNSTATS。
目錄統(tǒng)計信息表通常包含關(guān)于表中最高和最低值的信息,而優(yōu)化器假定數(shù)據(jù)值是在兩個端點值之間均勻分布的。
然而,如果數(shù)據(jù)值彼此之間差異較大,或者群集在某些點上,或者是碰到許多重復(fù)的數(shù)據(jù)值,
那么優(yōu)化器就無法選擇一個最佳的訪問路徑,除非收集了分布統(tǒng)計信息。
使用WITH DISTRIBUTION子句還可以幫助查詢處理沒有參數(shù)標志符(parameter marker)或主機變量的謂詞,
因為優(yōu)化器仍然不知道運行時的值是有許多行,還是只有少數(shù)行。
如果為單一索引進行runstats,可以使用:
runstats on table [模式名].[表名] for indexes [索引名]
2.runstats的作用:
一個SQL在寫完并運行之后,其實我們只是告訴了DB2去做什么,而不是如何去做。
而,具體的如何去做,就取決于優(yōu)化器。優(yōu)化器為了生成最優(yōu)的執(zhí)行計劃,就得掌握當前的系統(tǒng)信息,目錄中的統(tǒng)計信息等等。
runstats命令就是用來收集數(shù)據(jù)庫對象的狀態(tài)信息,這對優(yōu)化器生成最優(yōu)的執(zhí)行計劃至關(guān)重要。
3.什么時候需要runstats:
·在給表創(chuàng)建一個index后,我們最好做一次runstat,否則可能index沒有生效。不過有說法稱在8.2版本以后的DB2中,會在INDEX之后自動進行runstats;
·.在對table做了一次reorg后,記得要做一次runstats。因為對表做reorg,會修改表的很多信息,比如高水位等,所以做一次runstats,可以更新統(tǒng)計信息。
·當表里數(shù)據(jù)發(fā)生了比較大的變化,一般來說,大約表里面的數(shù)據(jù)量的10%-20%發(fā)生了變化,就應(yīng)該作一次runstats。這些變化包括刪除,修改,插入。
???? 對于一些非常大的表,比方在數(shù)據(jù)倉庫的項目里面,某些事實表非常巨大。這個時候,完整的對一個大表作runstats可能花費時間相當大,
???? DB2 8.1里面支持我們對這些大表作抽樣,比方說只對20%的數(shù)據(jù)作runstats,這樣的話,一般來說也能保證得到正確的執(zhí)行計劃。
???? 當然首先要確保這個表里面的數(shù)據(jù)最好分布比較均勻。
·.當你在分區(qū)(DPF)數(shù)據(jù)庫里面使用了REDISTRIBUTE DATABASE PARTITION GROUP這個命令,那么就需要用runstats來收集新的統(tǒng)計信息。
4.其他
當表比較小的時候,runstats是一件很普通的事情。但是當表非常大的時候,runstats將會占用相當大的時間,cpu和內(nèi)存。
通常只在關(guān)鍵查詢的速度開始減慢時,管理員才會對RUNSTATS給予適當?shù)淖⒁狻?
您可以通過制定高效、有效收集統(tǒng)計信息的策略,避免未經(jīng)思考就調(diào)優(yōu)查詢和執(zhí)行RUNSTATS。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
