一丶 背景
今天发现在一个5分钟一次的作业中发现一个异常:
MySql.Data.MySqlClient.MySqlException (0x80004005): Lock wait timeout exceeded; try restarting transaction
经过搜索,该问题一般是由于使用数据库事务时发生死锁,导致事务无限期等待,最终超时。所以,一味的增加 innodb_lock_wait_timeout 的值并没有什么用,甚至,反而会导致问题更加严重。
二、问题排查及解决方案
既然是事务发生了死锁,那就好查了,直接从 information_schema.innodb_trx 查询即可:
SELECT *
FROM `information_schema`.`innodb_trx`
ORDER BY `trx_started`
结果如下:
innodb_trx
注意,其中两条 LOCK WAIT 的记录就是作业中执行的事务,从 trx_query 中可以看到,其实SQL语句很简单,根据主键更新一条记录而已,按理说,没道理会慢到5分钟都执行不完,然后导致超时的。
但是,先不管,我们先把这两条记录对应的 trx_mysql_t
版权声明:本文为weixin_39938724原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。