這篇文章主要介紹mysql死鎖是如何產生的,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
mysql是一種關系型數據庫管理系統,使用的 SQL 語言是用于訪問數據庫的最常用標準化語言。在mysql的使用過程中,會有死鎖的情況發生,這產生的原因是什么呢?
MySQL的三種鎖:
表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖沖突的概率最高,并發度最低。
行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,并發度也最高。
頁面鎖:開銷和加鎖時間界于表鎖和行鎖之間;會出現死鎖;鎖定粒度界于表鎖和行鎖之間,并發度一般
算法:
next KeyLocks鎖,同時鎖住記錄(數據),并且鎖住記錄前面的Gap
Gap鎖,不鎖記錄,僅僅記錄前面的Gap
Recordlock鎖(鎖數據,不鎖Gap)
所以其實 Next-KeyLocks=Gap鎖+ Recordlock鎖
什么情況下會造成死鎖
所謂死鎖<DeadLock>: 是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
表級鎖不會產生死鎖.所以解決死鎖主要還是針對于最常用的InnoDB.
死鎖的關鍵在于:兩個(或以上)的Session加鎖的順序不一致。
那么對應的解決死鎖問題的關鍵就是:讓不同的session加鎖有次序。
以上是mysql死鎖是如何產生的的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。