Mysql上的innodb_lock_wait_timeout值很高

时间:2011-01-20 14:49:29

标签: mysql configuration

我们试图在MySQL的大型日志表上获得一些统计信息。某些选择查询花费的时间太长而无法完成并导致例外; 引起:java.sql.SQLException:超出锁定等待超时;尝试重新启动交易
这导致我们的整个应用程序停止使用相同的错误。经过一些研究,我们决定更改MySQL服务器配置的'innodb_lock_wait_timeout'变量。

但是,这种配置改变的缺点是什么?

2 个答案:

答案 0 :(得分:2)

我不确定这适用于您的问题,但您的问题是我刚才处理过的问题。我发现在我的系统上不需要锁,并且与CREATE TABLE AS SELECT * FROM table_x...之类的查询有关,即使在InooDB中也显然锁定了table_x中的所有记录。

解决方案是将全局参数innodb_locks_unsafe_for_binlog设置为true(在my.cnf中添加行innodb_locks_unsafe_for_binlog=1)。这改变了InnoDB锁定记录的方式。

Here是关于它的一些文档。它确实将我的应用程序保存在那些意外的锁中

答案 1 :(得分:1)

随着负载的增加,您需要更长的超时时间。缺点是存在不断增加其他客户端查询的最大查询时间的风险。你需要研究一下,我建议使用linux工具mytop来查找长时间运行的查询,然后对它们执行EXPLAIN以查看锁的使用方式。重构您的数据和/或查询以减少锁定。

最后,MariaDB(MySQL的一个分支)非常注重减少操作所需的锁定量,所以转向它也可能对你有帮助。