签到成功

知道了

CNDBA社区CNDBA社区

DB2 性能慢处理方法

2021-10-01 16:38 1280 0 原创 DB2
作者: hbhe0316

1.找到正在执行的应用程序

http://www.cndba.cn/hbhe0316/article/4795

db2pd -db <dbname> -act

2.捕获单应用快照

db2 get snapshot for application agentid <apphandleid>

通过快照找到“Section number”、”Package name”和”Application creator”.分析时间戳,原则上找出只有”Statement start timestamp”而没有”Statement stop timestamp”时间戳的section,即没有结束的section片段。

3.通过db2expln工具收集包内执行计划http://www.cndba.cn/hbhe0316/article/4795

db2expln -d <dbname> -c <Application creator> -p <Package name> -i -g -o /tmp/<Package name>.out

4.分析/tmp/ .out输出文件,原则上找出没有结束的那个”Section number”
发现如下:
Section = 52
http://www.cndba.cn/hbhe0316/article/4795http://www.cndba.cn/hbhe0316/article/4795http://www.cndba.cn/hbhe0316/article/4795

方法2:或者通过收集每个section对应的静态语句http://www.cndba.cn/hbhe0316/article/4795

db2 "select * from syscat.statements where pkgname='TR2002' and PKGSCHEMA='BTA' order by SEQNO" > /tmp/bta.TR2002.stmts.out

方法3:再或者通过db2bfd -h -s -v .bnd或者所有静态语句和变量

http://www.cndba.cn/hbhe0316/article/4795
http://www.cndba.cn/hbhe0316/article/4795

db2bfd -s -v tr2002.bnd

5.检查确认执行计划准确性

http://www.cndba.cn/hbhe0316/article/4795

db2 "select count(1) from bta.TINCOMETMP with ur"发现有147万条记录,所以包内统计信息是假的。

6.静态分析SQLhttp://www.cndba.cn/hbhe0316/article/4795

UPDATE tincometmp a SET a.f_sumincome=a.f_sumincome +
(select b.f_sumincome
from tincometmp b
where a.c_fundcode=b.c_fundcode and a.c_fundacco = b.c_fundacco
and a.c_tradeacco=b.c_tradeacco and b.d_cdate=?
WHERE a)

版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux,oracle

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
hbhe0316

hbhe0316

关注

1.只有承认无知,才能装下新的东西; 2.进步来自一点点滴滴的积累; 3.广博让你更优秀,而专业让你无法替代; 4.挫折和失败能够转换为一种财富。

  • 889
    原创
  • 1
    翻译
  • 13
    转载
  • 24
    评论
  • 访问:2667544次
  • 积分:1523
  • 等级:核心会员
  • 排名:第6名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ