Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

使用db2expln和runstats改善程序运行速度(转载)

Posted on 2009-07-16 17:35 Prayer 阅读(562) 评论(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左右,程序运行时间有了明显的减少。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理