错误 1205 (HY000):更新时超出锁定等待超时 mysql
ERROR 1205 (HY000): Lock wait timeout exceeded on update mysql
我正在 运行 关注更新 -
update table_x set name= 'xyz' where id = 121;
并获得 -
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
我用谷歌搜索了很多次,并增加了额外的时间 innodb_lock_wait_timeout
并没有帮助我。
请告诉我这个问题的根本原因以及我该如何解决。
我在专用服务器上使用 mysql 5.6(主-主复制)。
此外 table_x(Innodb table) 在数据库中大量使用。自动提交已开启。
您的任何其他交易似乎都被锁定了。您可以使用以下命令检查 INNODB 的状态:
SHOW ENGINE INNODB STATUS\G
像这样检查表上是否有锁:
show open tables where in_use>0;
然后杀死被锁定的进程。
找出与此UPDATE
同时存在的其他语句运行。听起来好像 运行 很长一段时间 和 挂在这个 UPDATE
需要的行上。同时这条语句正在等待。
查看它的一种方法是在 UPDATE
挂起时执行 SHOW FULL PROCESSLIST;
。
(在我看来,innodb_lock_wait_timeout
的默认值 50 秒太高了。提高该值只会加剧这种情况。)
如果您放弃解决冲突的 'root cause',那么您可能会以不同的方式解决问题。
- 降低
innodb_lock_wait_timeout
到,比方说,5.
- 在超时时以编程方式捕获错误并重新启动
UPDATE
。
- 对所有其他交易也这样做。其他查询也可能堆积如山;重新启动一些可能 "uncork" 问题。
SHOW VARIABLES LIKE 'tx_isolation';
-- 可能 是一个更好的设置,特别是如果长-运行 SELECT
是反派。
我已经解决了问题。我为 innodb_lock_wait_timeout
尝试了不同的值,也尝试更改查询但得到了相同的错误。我做了一些研究,并向我的同事询问了有关休眠的信息。
他们正在进行大量交易,其中包括更新主要 table 并最终提交。所以,我建议他们在每笔交易中使用 commit。最后我没有收到任何锁定等待超时错误。
我正在 运行 关注更新 -
update table_x set name= 'xyz' where id = 121;
并获得 -
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
我用谷歌搜索了很多次,并增加了额外的时间 innodb_lock_wait_timeout
并没有帮助我。
请告诉我这个问题的根本原因以及我该如何解决。 我在专用服务器上使用 mysql 5.6(主-主复制)。 此外 table_x(Innodb table) 在数据库中大量使用。自动提交已开启。
您的任何其他交易似乎都被锁定了。您可以使用以下命令检查 INNODB 的状态:
SHOW ENGINE INNODB STATUS\G
像这样检查表上是否有锁:
show open tables where in_use>0;
然后杀死被锁定的进程。
找出与此UPDATE
同时存在的其他语句运行。听起来好像 运行 很长一段时间 和 挂在这个 UPDATE
需要的行上。同时这条语句正在等待。
查看它的一种方法是在 UPDATE
挂起时执行 SHOW FULL PROCESSLIST;
。
(在我看来,innodb_lock_wait_timeout
的默认值 50 秒太高了。提高该值只会加剧这种情况。)
如果您放弃解决冲突的 'root cause',那么您可能会以不同的方式解决问题。
- 降低
innodb_lock_wait_timeout
到,比方说,5. - 在超时时以编程方式捕获错误并重新启动
UPDATE
。 - 对所有其他交易也这样做。其他查询也可能堆积如山;重新启动一些可能 "uncork" 问题。
SHOW VARIABLES LIKE 'tx_isolation';
-- 可能 是一个更好的设置,特别是如果长-运行 SELECT
是反派。
我已经解决了问题。我为 innodb_lock_wait_timeout
尝试了不同的值,也尝试更改查询但得到了相同的错误。我做了一些研究,并向我的同事询问了有关休眠的信息。
他们正在进行大量交易,其中包括更新主要 table 并最终提交。所以,我建议他们在每笔交易中使用 commit。最后我没有收到任何锁定等待超时错误。