2010-01-20 84 views
4

我得到了錯誤Lock wait timeout exceeded; try restarting transaction。這是什麼原因以及如何解決問題? FYI:innodb_lock_wait_timeout = 100在MySQL配置文件中。MySQL Lock超時超時

回答

6

這是鎖爭用的問題,最終導致其中一個鎖超時。這裏有幾個建議:

  • 請確保您有這導致行級鎖沒有表級鎖正確的索引。這將減少爭用。
  • 請確保您有外鍵約束的索引。要檢查insertupdate期間的關係約束,如果沒有這樣的索引(不知道這是否是MySQL的情況),某些數據庫會鎖定整個引用的表。
  • 如果問題仍然存在,請嘗試使事務更快/更小。再次,這將減少對數據庫的爭用。
  • 增加超時時間但保持合理值
0

這是發生在交易需要很長時間(即表格長時間被鎖定)的高交易系統上嗎?如果是這樣,您可能希望查看您的交易代碼,以使其更短/更細化/更高性能。