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