错误1205(HY000):更新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表)。Autocommit已打开。

找出与此UPDATE同时运行的其他语句。听起来好像正在运行很长时间挂在此UPDATE所需的行上。同时,此陈述正在等待。

看到它的一种方法是在悬挂UPDATE时进行SHOW FULL PROCESSLIST;

(我认为,innodb_lock_wait_timeout的50秒默认值很高。提高价值仅加剧了情况。)

如果您放弃解决冲突的"根本原因",那么您可能会以不同的方式解决问题。

  1. innodb_lock_wait_timeout to,例如5。
  2. 在段落时会捕获错误并重新启动UPDATE
  3. 对于所有其他交易也是如此。其他查询也可能正在堆积;重新启动一些可能"解开"问题。

SHOW VARIABLES LIKE 'tx_isolation';- May 是一个更好的设置,尤其是如果长期运行的SELECT是小人。

看起来其他任何交易都有一些锁定。您可以使用以下方式检查InnoDB的状态:

SHOW ENGINE INNODB STATUSG 

检查表上是否有任何锁:

show open tables where in_use>0;

然后杀死被锁定的过程。

我解决了问题。我尝试了innodb_lock_wait_timeout的不同值,也尝试更改查询,但有相同的错误。我进行了一些研究,并向同事询问了有关休眠的有关的有关。

他们正在进行交易数量,其中包括更新主表和最终提交。因此,我建议他们在每笔交易上使用提交。最后,我没有得到任何锁定等待时间的错误。

相关内容

  • 没有找到相关文章

最新更新