更新查询超过了Mysql锁等待超时

Posted

技术标签:

【中文标题】更新查询超过了Mysql锁等待超时【英文标题】:Mysql lock wait timeout exceeded on update query 【发布时间】:2015-10-13 21:19:24 【问题描述】:

在生产服务器的数据库中,调度程序每天运行一个程序,在该程序中我很少有删除插入和更新语句。

但它有时会在使用某些常用表的 1 次更新时抛出 lock wait timeout exceeded 错误。

一开始innodb_lock_wait_timeout是50秒,后来改成100,问题解决了一段时间,后来又出现错误,改成120,又临时解决了。现在我已经为全局设置了 150 秒,并在会话中设置了 200(在过程中)。几天后它工作正常。

但是这个过程非常重要,得到错误会产生问题,因为它包含非常重要的数据。

那么还有其他解决方案可以永久解决这个问题吗?

我是新手,请帮忙。

附: mysql - 5.6 128 GB 内存。 使用具有持久连接池的休眠。

【问题讨论】:

【参考方案1】:

在 my.cnf 中执行以下操作并重新启动 mysql

[mysqld]
innodb_lock_wait_timeout=10000

 SET GLOBAL innodb_lock_wait_timeout = 10000;

您还可以将触发会话设置为临时超时,将以下内容添加到您的触发器中:

SET innodb_lock_wait_timeout = 10000; 

【讨论】:

以上是关于更新查询超过了Mysql锁等待超时的主要内容,如果未能解决你的问题,请参考以下文章

MySQL锁(死锁)

MySQL锁等待超时的解决路径

MySQL锁等待超时的解决路径

MySQL InnoDB加锁超时回滚机制(转)

MySQL 锁等待超时(Lock wait timeout exceeded)

设置mysql 事务锁超时时间 innodb_lock_wait_timeout