mysql死鎖是怎么造成的

造成mysql死鎖的原因:兩個或兩個以上的進程在執(zhí)行過程中爭奪資源。mysql中有三種鎖,分別是表級鎖、行級鎖和頁面鎖。其中,表級鎖開銷小、加鎖快,不會出現(xiàn)死鎖情況。

mysql死鎖是怎么造成的

mysql是一種關系型數(shù)據(jù)庫管理系統(tǒng),使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標準化語言。在mysql的使用過程中,會有死鎖的情況發(fā)生,這產(chǎn)生的原因是什么呢?

MySQL的三種鎖:

表級鎖:開銷小,加鎖快;不會出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低。

行級鎖:開銷大,加鎖慢;會出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。

頁面鎖:開銷和加鎖時間界于表鎖和行鎖之間;會出現(xiàn)死鎖;鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般

算法:

next KeyLocks鎖,同時鎖住記錄(數(shù)據(jù)),并且鎖住記錄前面的Gap ? ?

Gap鎖,不鎖記錄,僅僅記錄前面的Gap

Recordlock鎖(鎖數(shù)據(jù),不鎖Gap)

所以其實 Next-KeyLocks=Gap鎖+ Recordlock鎖

什么情況下會造成死鎖

所謂死鎖: 是指兩個或兩個以上的進程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,它們都將無法推進下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。

表級鎖不會產(chǎn)生死鎖.所以解決死鎖主要還是針對于最常用的InnoDB.

死鎖的關鍵在于:兩個(或以上)的Session加鎖的順序不一致。

那么對應的解決死鎖問題的關鍵就是:讓不同的session加鎖有次序。

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享