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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章