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


26

我们正在运行java应用程序,运行了很长时间,后端是db,是MySQL,最近更新到mysql 5.6。一切运行良好,过去一周开始出现此错误,超过了锁定等待超时;尝试重启似乎永不停止的事务,不知道如何处理此错误才能停止。为什么它突然发生

Answers:


29

您可以将变量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   |
+--------------------------+-------+

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

SHOW ENGINE INNODB STATUS\G 

您可以按以下方式查看锁定表的列表:

 show open tables where in_use>0;

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

  show full processlist;

现在您可以杀死该线程或等待完成该线程。



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

-1

如果使用的MySQL版本低于5.0,则即使在会话或全局范围内也不能更改该变量。最好的解决方案是捕获查询并在流量缓慢后执行查询。


2
OP表示他们使用的是5.6,我认为该值为5.0或更高。
RDFozz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.