mysql - 找出是什么锁定了 MySQL InnoDB 表行

标签 mysql

我使用带有 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/

相关文章:

mysql - 应用迁移 '..._RenameColumnAlert_Identifier' 。 System.NotImplementedException : The method or operation is not implemented

java - 我如何使用java在SQL中划分两列?

mysql - 在 MySQL 中使用 LIKE 运算符和逗号问题

mysql - 如何在mysql中选择具有特定后缀的所有表?

Javascript 和 XML - 未捕获的类型错误 : Cannot read property 'childNodes' of undefined

php - JSON解析android中共享首选项期间出错

mysql - 我的数据库中的一列的格式为 "k000"。如何复制该字符串的一部分并更新输入这三个字符的同一表中的列?

php - 搜索使用 facebook api 发布的页面上的评论

MySQL 定位每天的第一个和最后一个事件

php - 如何使用 $_POST 在 foreach 中传递 2 个数组