Posted on 2009-07-16 17:35
Prayer 閱讀(598)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
DB2
前一陣,自己寫的一段程序在生產(chǎn)機(jī)上跑的速度總是不時(shí)非常理想,后來(lái)參考了其他同事給的一些意見(jiàn),使用db2expln工具察看了執(zhí)行計(jì)劃發(fā)現(xiàn)是沒(méi)有使用索引,接著使用runstats工具更新了表的統(tǒng)計(jì)數(shù)據(jù)后,程序的運(yùn)行速度有了較明顯的提高,下面是自己的一點(diǎn)心得有不對(duì)的地方歡迎大家指正。
runstats可以更新指定的表以及與其相關(guān)的索引的物理特性(physical characteristics )統(tǒng)計(jì)數(shù)據(jù) ,優(yōu)化器使用這些數(shù)據(jù)來(lái)決定到 數(shù)據(jù)的訪問(wèn)計(jì)劃(access plan),runstats統(tǒng)計(jì)的數(shù)據(jù)包括記錄條數(shù)、頁(yè)數(shù)、平均記錄長(zhǎng)度等。應(yīng)該在表的數(shù)據(jù)被大量更新、重組、新建索引以及使用沒(méi)有帶statics參數(shù)的loan后運(yùn)行runstats工具,在運(yùn)行runstats后應(yīng)該重新綁定,以使統(tǒng)計(jì)數(shù)據(jù)生效。在《command refence》中給出了runstats的非常詳細(xì)的解釋,足足有6頁(yè)A4紙,下面列出了幾種簡(jiǎn)單的用法。
runstats on table 表名
runstats on table 表名 for indexes 索引1,索引2|ALL
runstats on table 表名 and indexes 索引1,索引2|ALL
注意:表名要代模式名,for indexes 表示僅僅收集索引的數(shù)據(jù)而and indexes 表示除收集表的數(shù)據(jù)外還收集索引的數(shù)據(jù)。
db2expln可以用來(lái)給出系統(tǒng)的執(zhí)行計(jì)劃,它的用法是:
db2expln -d 數(shù)據(jù)庫(kù)名 -u 用戶名 密碼 -o 文件名|-t -c 生成包的模式名 -p 包名
注意-c后跟的是生成包的數(shù)據(jù)庫(kù)模式名,這可能與當(dāng)前數(shù)據(jù)庫(kù)環(huán)境的模式名不一樣,必要時(shí)可以使用
db2 list packages for all|grep 包名
來(lái)確定生成包的模式名。
使用db2expln得到的結(jié)果相當(dāng)豐富,比如包括索引使用、鎖、臨時(shí)表、連接等信息,在實(shí)際使用中我沒(méi)有仔細(xì)研究這些信息,而著重考察了在運(yùn)行runstats前后estimated cost的變化,estimated cost沒(méi)有單位只是代表語(yǔ)句按當(dāng)前執(zhí)行計(jì)劃執(zhí)行的花費(fèi),在運(yùn)行runstats后發(fā)現(xiàn)有一條語(yǔ)句的花費(fèi)由2000左右降低為100左右,在按查詢條件建立索引后再運(yùn)行runstats后花費(fèi)由100降為13左右,程序運(yùn)行時(shí)間有了明顯的減少。