MySQL遇到Deadlock found when trying to get lock,解決方案

最近遇到一個MYSQL update語句出現Deadlock found when trying to get lock的問題,分析一下緣由。

什麼狀況下會出現Deadlock found when trying to get lock?
https://dev.mysql.com/doc/refman/5.6/en/innodb-deadlocks.html
出現死鎖須要2個條件:
1)至少2個client(A,B)同時在執行事務
2)clientA鎖定了某一行,未提交事務,此時clientB也須要update/delete這一行,此時clientB就會進入等待狀態,直到出現Deadlock 。

如何減小死鎖的發生?
很重要的兩點,就能夠避免這種狀況
1)事務操做鎖定的行數較少(更精確的索引條件)。
2)保證事務較短的執行時間,完成後立刻提交。
這裏有更加詳細的描述:
https://dev.mysql.com/doc/refman/5.6/en/innodb-deadlocks-handling.html
-html

相關文章
相關標籤/搜索