我们正在运行Java应用程序,运行了很长时间,后端是db,是MySQL,最近更新到mysql 5.6。一切运行良好,过去一周开始出现此错误
超出了锁定等待超时;尝试重新启动看起来永远不会停止的事务
不知道该怎么办才能停止此错误。为什么突然发生

#1 楼

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


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

评论


让我们继续聊天中的讨论。

– JAVAC
15年5月8日在20:20

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

– Wouter
18-09-26在8:43

#2 楼

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

评论


OP表示他们使用的是5.6,我认为该值为5.0或更高。

–RDFozz
18年1月26日在21:30

对于旧版系统而言,到现在总是很好,因为旧版系统很难找到doc / help

–timmz
20-09-20在15:29