80004005 mysql_momo314 – MySqlException (0x80004005): Lock wait timeout exceeded; try restarting tra…

  • Post author:
  • Post category:mysql




一丶 背景

今天发现在一个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`

结果如下:

bcbc2adc78f89c502fbbd9a6119d6980.png
innodb_trx

注意,其中两条 LOCK WAIT 的记录就是作业中执行的事务,从 trx_query 中可以看到,其实SQL语句很简单,根据主键更新一条记录而已,按理说,没道理会慢到5分钟都执行不完,然后导致超时的。

但是,先不管,我们先把这两条记录对应的 trx_mysql_t



版权声明:本文为weixin_39938724原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。