db2调优sql执行分析

来源:互联网 发布:攻击网站软件 编辑:程序博客网 时间:2024/06/16 22:37
 
db2调优sql执行分析

    在之前一直有个误解,认为把表的全部字段建立索引跟不建是一样的,所以在一次实际应用中,当数据量到达了100万之后,检索速度明显地慢,而且在执行查询时间cpu占用率非常的高,导致影响到了其它的作业引发连锁的反应.
    跟一些朋友探讨后,明白了一个观点,虽然表的全部字段建立索引,看上去是查全表,不建索引也是查全表,但是,这查询的效率问题决定于数据的存储方式,以及在该存储方式下的查询算法,朋友指出,索引的存储与查询是b tree方式的,而表数据的存储则不然.可以想像,表数据也存成b tree的方式,则在一般的存取操作下消耗是具大的.
    这个不佳sql的发现,是dba在观察某一时刻中查看到它的执行时间是位列前五的.被db2痛批了一顿.dba告诉我应该使用db2expln(db2exfmt)来发现在sql语句中是否出现全表扫描的现像.
     学习 ...

db2用于调优分析的命令
#抓取db2的快照信息
db2 get snapshot for dynamic sql on tableName
#DB2事件监视db2
(1) db2 create event monitor statev for tables,statements,transactions,deadlocks write to file 'C:\logs\event' maxfiles 10 maxfilesize 5
(2) db2 set event monitor statev state 1
(3) Run the SQL statements
(4) db2 flush event monitor statev
(5) db2evmon databaseName statev > output.txt
(6) db2 set event monitor statev state 0
#db2 sql执行分析
db2 set current explain mode [no|yes|explain]
db2expln -database databaseName -statement "select * from example" -t -z @ -g>C:\ex.log
#db2 sql详细分析
(1) 执行\SQLLIB\MISC\EXPLAIN.DDL
db2 -tvf EXPLAIN.DDL
(2) 设置命令解释模式
db2 set current explain mode explain
(3) 执行需要监控的sql
(4) 关闭解析命名模式
db2 set current explain mode no
(5) 生成信息文件
db2exfmt -d databaseName -g TIC -w -1 -n % -s % -# 0 -o C:\exfmt_runstats.out