最近遇到一個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