mysql 锁等待超时超时;尝试重新启动事务

JAV*_*VAC 33 mysql mysql-5.6

我们正在运行 java 应用程序,运行了很长时间,后端是 db 是 MySQL,最近更新到 mysql 5.6。一切都运行良好,上周开始出现此错误 Lock wait timeout exceeded ;尝试重新启动看起来永远不会停止结束的事务不知道如何处理此错误以停止。为什么会突然发生

小智 39

您可以将变量 innodb_lock_wait_timeout=100 设置为锁定时间为 100 秒。

mysql> set innodb_lock_wait_timeout=100;

Query OK, 0 rows affected (0.02 sec)

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 100   |
+--------------------------+-------+
Run Code Online (Sandbox Code Playgroud)

超时的事务,尝试锁定另一个进程持有的表。并且您的超时变量设置的秒数很少。所以它显示错误。您可以通过命令查看更多状态。

SHOW ENGINE INNODB STATUS\G 
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式查看锁定表的列表-

 show open tables where in_use>0;
Run Code Online (Sandbox Code Playgroud)

现在查看正在使用该表的线程

  show full processlist;
Run Code Online (Sandbox Code Playgroud)

现在您可以终止该线程或等待完成它。

  • 感谢您提供此信息,但是当锁定不断发生时,如何才能找到问题的根源,即使是在具有小更新(例如增加或更新单个字段)的非常简单的表上。 (3认同)