【问题标题】:innodb_lock_wait_timeout increase timeoutinnodb_lock_wait_timeout 增加超时
【发布时间】:2015-04-28 10:02:00
【问题描述】:

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

set GLOBAL innodb_lock_wait_timeout=1

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

感谢您的帮助。

【问题讨论】:

    标签: php mysql database timeout innodb


    【解决方案1】:

    如果这是一个 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 |
    +----------------------------+
    

    解释变量的 GLOBAL 与 SESSION:GLOBAL 值用于初始化连接开始时的 SESSION 值。之后,您可以更改 SESSION 值以影响您正在执行的操作。并且更改 GLOBAL 值对您的当前连接没有影响。

    将超时更改为 1 是非常安全的(一旦您了解了 GLOBAL 与 SESSION)。唯一会改变的是出现该错误的频率。

    【讨论】:

    • 至少对我来说,在 MySQL 5.6 上它没有成功:mysql> SET GLOBAL innodb_lock_wait_timeout = 1; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@innodb_lock_wait_timeout; +----------------------------+ | @@innodb_lock_wait_timeout | +----------------------------+ | 50 | +----------------------------+ 1 row in set (0.00 sec)
    • @AinTohvri - 注意 GLOBALSESSION
    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 2017-09-16
    • 2010-10-31
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2021-09-06
    相关资源
    最近更新 更多