我正在运行以下更新 -
update table_x set name= 'xyz' where id = 121;
得到 -
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
我用Google搜索了多次,并为innodb_lock_wait_timeout
添加了额外的时间而没有帮助我。
请让我知道此问题的根本原因以及我如何解决它。 我在专用服务器上使用mysql 5.6(主 - 主复制)。 另外table_x(Innodb表)在数据库中大量使用。 Autocommit已开启。
答案 0 :(得分:1)
看起来你的任何其他交易都有一些锁定。您可以使用以下方法检查INNODB的状态:
SHOW ENGINE INNODB STATUS\G
检查表上是否有任何锁定:
show open tables where in_use>0;
然后杀死被锁定的进程。
答案 1 :(得分:1)
找出与此UPDATE
同时运行的其他语句。听起来好像它运行很长时间和挂在这个UPDATE
所需的行上。与此同时,这句话正在等待。
查看它的一种方法是在SHOW FULL PROCESSLIST;
挂起时执行UPDATE
。
(在我看来,innodb_lock_wait_timeout
的默认值为50秒很高。提高价值只会加剧情况。)
如果你放弃解决冲突的“根本原因”,那么你可能会以不同的方式解决问题。
innodb_lock_wait_timeout
,比方说,5。UPDATE
。 SHOW VARIABLES LIKE 'tx_isolation';
- 可能是一个更好的设置,特别是如果一个长期运行的SELECT
是恶棍。
答案 2 :(得分:0)
我已经解决了这个问题。我为innodb_lock_wait_timeout
尝试了不同的值,也尝试更改查询但得到了同样的错误。我做了一些研究并向同事们询问了hibernate。
他们正在进行多项交易,包括更新主表和最终提交。所以,我建议他们在每个事务上使用commit。最后,我没有得到任何锁定等待时间错误。