我使用带有InnoDB表的数据库。当我尝试更新一行时,我得到" ERROR 1205(HY000):超过锁定等待超时;尝试重启交易"消息,我不会在任何其他行上(我已经尝试过)。
我该如何调试?
SHOW PROCESSLIST;
只会产生休眠进程,因为它是一个InnoDB表,SHOW TABLE STATUS
基本没用(似乎只适用于MyISAM表)。
SHOW ENGINE INNODB状态
也不包含任何有用的内容;最新检测到的DEADLOCK部分包含3天前不再存在的两个事务(线程ID不再出现在SHOW PROCESSLIST中),似乎不再相关。
有什么方法可以了解哪些查询导致了问题? 另外,我希望看到InnoDB表上的当前锁定,现在锁定什么 - 而不是三天前。
答案 0 :(得分:4)
你检查过mysql的错误日志文件吗?也许有更多细节可以说明失败的交易。
要显示正在使用的所有表,只需执行此语法
SHOW OPEN TABLES WHERE IN_Use=1