免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3255 | 回复: 1
打印 上一主题 下一主题

使用db2expln和runstats改善程序运行速度的一点小心得,请大家指正。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-24 10:10 |只看该作者 |倒序浏览
前一阵,自己写的一段程序在生产机上跑的速度总是不时非常理想,后来参考了其他同事给的一些意见,使用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左右,程序运行时间有了明显的减少。

论坛徽章:
0
2 [报告]
发表于 2005-11-25 11:59 |只看该作者
不错,另外索引也是一个影响性能的主要因素,索引好坏性能差别也很大。
SQL也可以调优,尤其是连接的调优,还有排序堆的使用,等等,这些对性能影响都很大。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP