暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

记一次执行计划异常变化分析处理过程

IT那活儿 2021-01-30
546
点击上方蓝字关注我们

 现      象 

开发人员反映,系统工单无法提交成功,双机业务程序报超时异常,请求DB侧确认数据库是否存在异常。

分析解决过程

1)接入数据库等待事件无异常,程序账号会话信息无异常。

2)开发人员反馈后台一类(selectdistinct xxxx)sql执行时间异常,请求db侧进行优化

3)根据提示找到其中一条sqlid,进一步分析

==>这里直接说分析结果了,执行计划第七步走错了索引,原因是某张表的谓语列长度超过32个字符(具体可参考<Statisticsand histograms of character columns with length longer than 32 or 64characters (Doc ID 800089.1)>),使用了直方图统计信息,导致执行计划不是最优。

4)解决方法

需要重新收集该表统计信息,删除列上统计信息,收集方法为:METHOD_OPT=>'FOR COLUMNS <column_name> SIZE 1'

5)优化效果

执行时间由之前的150s左右降为1s左右,应用程序重启后功能恢复正常了。

6)之前跑的很正常的程序,为什么突然间异常了?

==》结合历史快照及sql信息,虽然执行次数少,但可以看到上午时间10点后就异常了,而其他时间的信息快照信息也没有抓到,进一步说明之前确实是正常的。

==》查询某表的统计信息变更时间,上午时间段确实有变化。大致可以确定统计信息发生了变化,导致涉及某表的一批sql语句执行计划异常。至于是啥原因导致了统计信息有变更,这里不再阐述。

 总      结 

这种执行次数少的语句,历史信息可能没有记录,导致出问题时,不能和历史的执行计划做对比,立即判断出执行计划有变化。这套系统之前上线时碰到过此类问题,根据以往经验,这次能够快速的优化解决问题。反之,可能就要折腾一段时间了。

END

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论