这两天业务系统出了一点问题,本来系统运行正常的,但是近三天系统访问很慢,但是系统没有太多消耗资源的业务,也没有很大的并发量,感觉很奇怪,于是开启了排查之路。
首先看了一下应用日志,发现报了大量的MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction异常,大多数是有个推送接收数据的接口在做数据更新插入的时候报的,于是就开始去排查数据库问题,数据库使用客户端工具连接,发现连接还不慢,说明网络没问题。但是随便执行一张小用户量的表查询的时候发现输出结果非常慢,包括报错的业务接口操作的表。从这个英文的异常描述就是“事务回滚异常,锁等待超时超过了,尝试重启事务”,作为开发人员感觉很不知所措,难道锁表了?dba查看也没有锁表。大概过了几分钟的排查时间,数据库突然变快了。想想感觉好了吧,于是还是怀疑网络问题,ping了一会发现速度还可以,没啥抖动,但是业务系统过了一会又变慢。
再次详细的看应用服务日志,发现还报了MySQL error 1129,有具体错误码了,这个时候感觉是数据库出问题了,于是dba用hdparm做了磁盘检测,发现i/o速度很慢。观察了一段时间发现这个磁盘i/o的速度时快时慢,很不稳定。所以初步估计上述的两个异常都是因为数据库磁盘读写速度慢引起的,系统也是间歇性的快和慢。
最后联系虚拟化厂家做磁盘更换,至此系统暂时恢复正常。