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
-

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM