设为首页 收藏本站
查看: 1520|回复: 0

[经验分享] DB2数据库慢SQL性能优化详解

[复制链接]

尚未签到

发表于 2018-10-23 10:24:57 | 显示全部楼层 |阅读模式
  一、抓取批量耗时最久的SQL:
  2、执行次数最多的TOP10SQL"
  db2 "select substr(stmt_text,1,500) as stmt_text,NUM_EXECUTIONS,TOTAL_USR_CPU_TIME,TOTAL_EXEC_TIME,SORT_OVERFLOWS from sysibmadm.snapdyn_sql order by NUM_EXECUTIONS desc fetch first 10 rows only"|grep -iv selected
  3、平均执行时间最长的TOP10SQL"
  db2  "select substr(stmt_text,1,500) as stmt_text,average_execution_time_s,num_executions from sysibmadm.top_dynamic_sql order by average_execution_time_s desc fetch first 10 rows only"|grep -iv selected
  4、排序最多的TOP10SQL"
  db2 "select substr(stmt_text,1,500) as stmt_text,stmt_sorts,SORT_OVERFLOWS,TOTAL_USR_CPU_TIME,NUM_EXECUTIONS from sysibmadm.snapdyn_sql order by stmt_sorts desc fetch first 10 rows only"|grep -iv selected
  5、通过以上SQL获得最耗时的SQL信息如下:
  update  tbhisfeyehz  t set client_num=( select count(distinct a.in_client_no) from vsharedetail a, tbbranch b, tbtainfo c  where a.ta_code=c.ta_code and a.open_branch=b.branch_no  and substr(b.internal_branch,1,length(Rtrim(t.internal_branch))) =  t.internal_branch  and a.client_type=t.client_type and a.prd_code=t.prd_code and a.ta_code=t.ta_code and c.prd_type=t.prd_type and a.tot_vol > 0.0001  and a.ta_code=?)  where exists(select 1 from vsharedetail a, tbbranch b, tbtainfo c where a.ta_code=c.ta_code and a.open_branch=b.branch_no  and substr(b.internal_branch,1,length(Rtrim(t.internal_branch))) =  t.internal_branch  and a.client_type=t.client_type and a.prd_code=t.prd_code and a.ta_code=t.ta_code and c.prd_type=t.prd_type and a.tot_vol > 0.0001 and a.ta_code=?)  and internal_branch in(select internal_branch from tbbranch where branch_level?)  and sum_flag='0clear
  三、为了在测试环境复现该执行计划我们需要从生产导出该SQL用到的所有基表的统计信息还原到测试环境下去。
  1、导出统计信息:
  db2look -d ifm30 -u ifm40 -m -t tbhisfeyehz -o tbhisfeyehz.sql
  db2look -d ifm30 -u ifm40 -m -t tbsharedetail1 -o tbsharedetail1.sql
  db2look -d ifm30 -u ifm40 -m -t tbsharedetail2 -o tbsharedetail2.sql
  db2look -d ifm30 -u ifm40 -m -t tbsharedetail3 -o tbsharedetail3.sql
  db2look -d ifm30 -u ifm40 -m -t tbsharedetail4 -o tbsharedetail4.sql
  db2look -d ifm30 -u ifm40 -m -t tbsharedetail5 -o tbsharedetail5.sql
  db2look -d ifm30 -u ifm40 -m -t tsys_branch    -o tsys_branch.sql
  db2look -d ifm30 -u ifm40 -m -t tbtainfo       -o tbtainfo.sql
  2、生效到测试环境:
  db2 -tvf  tbsharedetail1.sql
  db2 -tvf  tbsharedetail2.sql
  db2 -tvf  tbsharedetail3.sql
  db2 -tvf  tbsharedetail4.sql
  db2 -tvf  tbsharedetail5.sql
  db2 -tvf  tsys_branch.sql
  db2 -tvf  tbtainfo.sql
  91pron free videos
  db2 -tvf  tbhisfeyehz.sql
  四、分析SQL执行计划,根据执行计划分析关键执行成本之处的SQL计划并做出调整计划
  db2 connect to ifm30
  db2 set current explain mode explain
  db2 -tvf optim.sql
  db2 set current explain mode no
  db2exfmt -d ifm30 -l -o
  五、使用优化器顾问程序给出的建议进行优化
  db2advis -d ifm30 -i optim3.sql -m i -l -1 -t 0 -o product.txt
  六、优化相关基表
  1、根据优化引擎建议新建唯一索引在对应基表之上
  -- index[1],    0.013MB
  CREATE INDEX "IFM40   "."IDX1501210621430" ON "IFM40   "."TBSHAREDETAIL4"
  ("TOT_VOL" ASC) ALLOW REVERSE SCANS COLLECT SAMPLED DETAILED STATISTICS;
  COMMIT WORK ;
  -- index[2],    0.013MB
  CREATE INDEX "IFM40   "."IDX1501210623270" ON "IFM40   "."TBSHAREDETAIL3"
  ("TOT_VOL" ASC) ALLOW REVERSE SCANS COLLECT SAMPLED DETAILED STATISTICS;
  COMMIT WORK ;
  -- index[3],    0.013MB
  CREATE INDEX "IFM40   "."IDX1501210625230" ON "IFM40   "."TBSHAREDETAIL2"
  ("TOT_VOL" ASC) ALLOW REVERSE SCANS COLLECT SAMPLED DETAILED STATISTICS;
  COMMIT WORK ;
  -- index[4],    0.013MB
  CREATE INDEX "IFM40   "."IDX1501210627190" ON "IFM40   "."TBSHAREDETAIL1"
  ("TOT_VOL" ASC) ALLOW REVERSE SCANS COLLECT SAMPLED DETAILED STATISTICS;
  COMMIT WORK ;
  -- index[5],    0.013MB
  CREATE INDEX "IFM40   "."IDX1501210629150" ON "IFM40   "."TBSHAREDETAIL5"
  ("TOT_VOL" ASC) ALLOW REVERSE SCANS COLLECT SAMPLED DETAILED STATISTICS;
  COMMIT WORK ;
  -- index[6],    0.013MB
  CREATE UNIQUE INDEX "IFM40   "."IDX1501210631080"
  ON "IFM40   "."TBTAINFO" ("TA_CODE" ASC) INCLUDE ("PRD_TYPE")
  ALLOW REVERSE SCANS COLLECT SAMPLED DETAILED STATISTICS;
  COMMIT WORK ;
  -- index[7],    0.013MB
  CREATE INDEX "IFM40   "."IDX1501210632520" ON "IFM40   "."TBHISFEYEHZ"
  ("SUM_DATE" ASC, "SUM_FLAG" ASC, "PRD_TYPE" ASC, "TA_CODE"
  ASC, "CLIENT_NUM" ASC, "INTERNAL_BRANCH" ASC, "CLIENT_TYPE"
  ASC, "PRD_CODE" ASC) ALLOW REVERSE SCANS COLLECT SAMPLED DETAILED STATISTICS;
  COMMIT WORK ;
  -- index[8],    0.036MB
  CREATE INDEX "IFM40   "."IDX1501210632500" ON "IFM40   "."TSYS_BRANCH"
  ("BRANCH_PATH" ASC, "BRANCH_LEVEL" ASC) ALLOW REVERSE
  SCANS COLLECT SAMPLED DETAILED STATISTICS;
  COMMIT WORK ;
  -- index[9],    0.024MB
  CREATE UNIQUE INDEX "IFM40   "."IDX1501210631010"
  ON "IFM40   "."TSYS_BRANCH" ("BRANCH_CODE" ASC) INCLUDE
  ("BRANCH_PATH") ALLOW REVERSE SCANS COLLECT SAMPLED DETAILED STATISTICS;
  COMMIT WORK ;
  2、批量统计信息更新
  使用如下shell脚本批量优化
  cat tblist|while read a
  db2 connect to ifm30 >>/dev/null
  do
  if [ $a  ' ' ];
  then
  db2 "runstats on table ifm40.${a} with distribution and detailed indexes all"
  else
  exit
  fi
  done
  3、业务验证,通过重新批量测试,由原来的30min降低到2min优化效果明显


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625329-1-1.html 上篇帖子: apache tomcat + apache server 下篇帖子: Cygwin & SSH & X Server setup-WaveWork
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表