当一个连接会话等待另外一个会话持有的互斥行锁时,就会发生锁等待情况,行锁等待超时的报错:“Lock wait timeout exceeded; try restarting transaction”。
执行以下操作,查看存在当前正在执行的事务和等待锁的事务
--查看上次死锁信息
show engine innodb status;
--执行以下SQL语句,查看正在执行的事务select * from information_schema.INNODB_TRX;
mysql 5.x
--查看锁
select * from information_schema.INNODB_LOCKS;
--查看锁等待:
select * from information_schema.INNODB_LOCK_WAITS;
mysql 8.x
--查看锁:
select * from
performance_schema.data_locks;
--查看锁等待:
select * from performance_schema.data_lock_waits;
--查看mdl锁:
select * from
performance_schema.metadata_locks;
解决死锁:
关闭阻塞源会话,可以帮助快速解除阻塞。
查看是否有长时间未提交的事务,及时提交事务。
避免非必要大查询。