2010-01-20 79 views
4

我得到了错误Lock wait timeout exceeded; try restarting transaction。这是什么原因以及如何解决问题? FYI:innodb_lock_wait_timeout = 100在MySQL配置文件中。MySQL Lock超时超时

回答

6

这是锁争用的问题,最终导致其中一个锁超时。这里有几个建议:

  • 请确保您有这导致行级锁没有表级锁正确的索引。这将减少争用。
  • 请确保您有外键约束的索引。要检查insertupdate期间的关系约束,如果没有这样的索引(不知道这是否是MySQL的情况),某些数据库会锁定整个引用的表。
  • 如果问题仍然存在,请尝试使事务更快/更小。再次,这将减少对数据库的争用。
  • 增加超时时间但保持合理值
0

这是发生在交易需要很长时间(即表格长时间被锁定)的高交易系统上吗?如果是这样,您可能希望查看您的交易代码,以使其更短/更细化/更高性能。