慕标琳琳
正如在有关此问题的众多SO线程之一中提到的那样:有时锁定表的进程显示为在进程列表中睡眠!我正在撕扯我的头发,直到我杀死所有在相关数据库中打开的睡眠线程(当时没有一个是活跃的)。最终解锁了表并让更新查询运行。这位评论者说了一句类似于“有时一个MySQL线程会锁定一个表,然后在等待与MySQL无关的事情发生时休眠。”在重新审核show engine innodb status日志之后(一旦我跟踪了负责锁定的客户端),我发现有问题的卡住线程列在事务列表的最底部,位于即将发生错误的活动查询下方由于冻结锁定:---------------------TRANSACTION 2744943820, ACTIVE 1154 sec(!!)2 lock struct(s), heap size 376, 2 row lock(s), undo log entries 1MySQL thread id 276558, OS thread handle 0x7f93762e7710, query id 59264109 [ip] [database] cleaning upTrx read view will not see trx with id >= 2744943821, sees < 2744943821(不确定“Trx读取视图”消息是否与冻结锁相关,但与其他活动事务不同,此消息不会显示已发出的查询,而是声称事务处于“清理”状态,但具有多个行锁)故事的寓意是,即使线程处于休眠状态,事务也可以处于活动状态。