一次系统性能问题解决经历

新项目发布后非常不稳定,主要的问题集中在数据库频繁卡死。

错误提示
引用
Deadlock found when trying to get lock; try restarting ..........


开始寻找问题原因,查看慢速SQL查询,发现主要问题在一张5000多条数据的点位信息表。
按理来说,这个数据量对mysql来说是一个非常轻松的数据量,为什么会频繁出现超时问题?
查看查询条件,包含一个字段的 in 查询。照理来说也不应该有那么慢,数据量太低,表中的字段有多个varchar字段,文字太多?按照以往的经验来判断,应该不会,其他项目中相同数量级带varchar字段的表也没有出现类似问题。

观察服务器和本地测试,会发现问题出现的有时间规律,刚启动时查询没有问题,请求时间平均在100多ms左右,过一段时间,没有任何访问的情况下,系统已经变的很慢,开始考虑是不是后台运行的定时程序出问题了。

沿着这个思路排查,发现一个定时程序是定时将该表中未计算的数据提取后,与另外一张12万数据量的表进行逐行计算,且在每交叉计算后,伴随着一句update。update数据量是相当大。问题应该就在这里。查看代码去除不合理的写法后,系统恢复稳定,请求速度恢复正常。

也许问题很简单,问题的关键还是对问题的定位,线索很重要。

猜你喜欢

转载自wutaoo.iteye.com/blog/2020747