我在更新之后正在运行 -
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秒默认值很高。提高价值仅加剧了情况。)
如果您放弃解决冲突的"根本原因",那么您可能会以不同的方式解决问题。
-
下
innodb_lock_wait_timeout
to,例如5。 - 在段落时会捕获错误并重新启动
UPDATE
。 - 对于所有其他交易也是如此。其他查询也可能正在堆积;重新启动一些可能"解开"问题。
SHOW VARIABLES LIKE 'tx_isolation';
- May 是一个更好的设置,尤其是如果长期运行的SELECT
是小人。
看起来其他任何交易都有一些锁定。您可以使用以下方式检查InnoDB的状态:
SHOW ENGINE INNODB STATUSG
检查表上是否有任何锁:
show open tables where in_use>0;
然后杀死被锁定的过程。
我解决了问题。我尝试了innodb_lock_wait_timeout
的不同值,也尝试更改查询,但有相同的错误。我进行了一些研究,并向同事询问了有关休眠的有关的有关。
他们正在进行交易数量,其中包括更新主表和最终提交。因此,我建议他们在每笔交易上使用提交。最后,我没有得到任何锁定等待时间的错误。