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

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