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