造成mysql死鎖的原因:兩個或兩個以上的程序在執行過程中爭奪資源。 mysql中有三種鎖,分別是表級鎖、行級鎖、頁鎖。其中,表級鎖開銷小、加鎖快,不會出現死鎖狀況。
mysql是一種關聯式資料庫管理系統,使用的 SQL 語言是用於存取資料庫的最常用標準化語言。在mysql的使用過程中,會有死鎖的情況發生,這產生的原因又是什麼呢?
MySQL的三種鎖定:
表級鎖定:開銷小,加上鎖定快;不會出現死鎖;鎖定粒度大,發生鎖定衝突的機率最高,併發度最低。
行級鎖定:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖定衝突的機率最低,並發度也最高。
頁面鎖定:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,並發度一般
#演算法:
next KeyLocks鎖,同時鎖住記錄(資料),並且鎖住記錄前面的Gap
Gap鎖,不鎖記錄,僅記錄前面的Gap
Recordlock鎖(鎖數據,不鎖Gap)
所以其實Next-KeyLocks=Gap鎖Recordlock鎖
什麼情況下會造成死鎖
#所謂死鎖
表格層級鎖定不會產生死鎖.所以解決死鎖主要還是針對於最常用的InnoDB.
死鎖的關鍵在於:兩個(或以上)的Session加鎖的順序不一致。
那麼對應的解決死鎖問題的關鍵就是:讓不同的session加鎖有次序。
以上是mysql死鎖是怎麼造成的的詳細內容。更多資訊請關注PHP中文網其他相關文章!