我们正在尝试获取有关 MySQL 上大型日志表的一些统计信息。某些选择查询的完成时间太长,导致出现异常;
引起:java.sql.SQLException:超过锁定等待超时;尝试重启交易
这导致我们的整个应用程序停止服务并出现相同的错误。经过一番研究,我们决定更改 MySQL 服务器配置的“innodb_lock_wait_timeout”变量。
但是,这种配置更改的缺点是什么?
最佳答案
我不确定这是否适用于您的问题,但您的问题是我刚才处理过的问题。我发现在我的系统上不需要锁,并且与 CREATE TABLE AS SELECT * FROM table_x...
这样的查询相关,这显然锁定了 table_x 中的所有记录,即使在 InooDB 中也是如此。
解决方案是将全局参数 innodb_locks_unsafe_for_binlog
设置为 true(在 my.cnf 中添加行 innodb_locks_unsafe_for_binlog=1
)。这改变了 InnoDB 锁定记录的方式。
Here是关于它的一些文档。它确实使我的应用程序免于那些意外的锁定。
关于mysql - Mysql 上 innodb_lock_wait_timeout 的高值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4748527/