innodb_lock_wait_timeout增加超时

时间:2015-02-26 05:57:59

标签: php mysql database timeout innodb

我正在使用MySQL数据库并尝试在插入后更新记录,因此我收到错误ER_LOCK_WAIT_TIMEOUT: Lock wait timeout exceeded; try restarting transaction。 所以我通过以下查询来减少超时: -

set GLOBAL innodb_lock_wait_timeout=1

所以我的问题是: - 这样做可以吗?是否会导致性能问题等其他问题?

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

如果这是一个Web应用程序,并且您尝试从一个页面挂到另一个页面,那么不要;它不会起作用。

“刚刚过去”是什么意思?如果你在两个语句之间没有做任何事情,即使超时1秒也应该足够大。

mysql> SET GLOBAL innodb_lock_wait_timeout = 1;
mysql> SELECT @@innodb_lock_wait_timeout;
+----------------------------+
| @@innodb_lock_wait_timeout |
+----------------------------+
|                         50 |
+----------------------------+
mysql> SET SESSION innodb_lock_wait_timeout = 1;
mysql> SELECT @@innodb_lock_wait_timeout;
+----------------------------+
| @@innodb_lock_wait_timeout |
+----------------------------+
|                          1 |
+----------------------------+

为VARIABLES解释GLOBAL与SESSION:GLOBAL值用于在连接开始时初始化 SESSION值。之后,您可以更改SESSION值以影响您正在执行的操作。更改GLOBAL值不会影响您的当前连接。

将超时更改为1非常安全(一旦理解了GLOBAL vs SESSION)。唯一会改变的是获得该错误的频率。