我使用带有 InnoDB 表的数据库。当我尝试更新一行时,我收到“错误 1205 (HY000):超出锁定等待超时;尝试重新启动事务”消息,我没有在任何其他行(我已经尝试过)上收到该消息。
我该如何调试它?
SHOW PROCESSLIST;
仅产生休眠进程,因为它是一个 InnoDB 表,SHOW TABLE STATUS
基本上没用(似乎只适用于 MyISAM 表)。
SHOW ENGINE INNODB STATUS
也不包含任何有用的东西; LATEST DETECTED DEADLOCK 部分包含 3 天前的两个事务,它们不再存在(线程 ID 不再出现在 SHOW PROCESSLIST 中)并且看起来不再相关。
有什么方法可以知道是什么查询导致了问题? 我也很想看到 InnoDB 表上的当前锁,现在是什么锁定什么——而不是三天前。
最佳答案
你查过mysql的错误日志文件了吗?也许有更多关于哪个交易失败的细节。
要显示所有正在使用的表,只需执行此语法
SHOW OPEN TABLES WHERE IN_Use=1
关于mysql - 找出是什么锁定了 MySQL InnoDB 表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24880374/