- INNODB_LOCKS, INNODB_LOCK_WAITS, INNODB_TRX三个表是MYSQL中事务和锁相关的表,遇到死锁或者等待锁超时的问题时,可以从这三个表中找的问题,三个表的表结构可以从下面这篇博客中详细查看。https://blog.csdn.net/yuyinghua0302/article/details/82318408
- INNODB_TRX表中可以查到正在执行的事务
- TRX_QUERY字段会显示执行的sql,通过sql能看出是那一张表事务有问题,找的对应数据。
- TRX_REQUESTED_LOCK_ID事务当前正在等待的锁的ID,如果
TRX_STATE
是LOCK WAIT
; 否则NULL
。- 如果这里是null,表明就是这个sql的问题,开始优化sql吧。
- 如果不是null,拿着这个TRX_REQUESTED_LOCK_ID去INNODB_LOCKS进一步查询。
- INNODB_LOCKS中进一步查询
- LOCK_ID和上文中说的的TRX_REQUESTED_LOCK_ID是一致的,找到对应的数据,然后通过这条数据的LOCK_TRX_ID
- 拿着这个LOCK_TRX_ID再去INNODB_TRX表中按TRX_ID字段查询,然后再按步骤2走,循环往复就能找到对应sql,最好还是要优化sql,索引,数据库配置等。
数据库死锁,Lock wait timeout exceeded; try restarting transaction,前端pending等问题排查
最新推荐文章于 2024-05-17 15:48:10 发布