首頁  >  文章  >  資料庫  >  mysql死鎖是怎麼造成的

mysql死鎖是怎麼造成的

little bottle
little bottle原創
2019-05-18 13:32:217061瀏覽

造成mysql死鎖的原因:兩個或兩個以上的程序在執行過程中爭奪資源。 mysql中有三種鎖,分別是表級鎖、行級鎖、頁鎖。其中,表級鎖開銷小、加鎖快,不會出現死鎖狀況。

mysql死鎖是怎麼造成的

mysql是一種關聯式資料庫管理系統,使用的 SQL 語言是用於存取資料庫的最常用標準化語言。在mysql的使用過程中,會有死鎖的情況發生,這產生的原因又是什麼呢?

MySQL的三種鎖定:

表級鎖定:開銷小,加上鎖定快;不會出現死鎖;鎖定粒度大,發生鎖定衝突的機率最高,併發度最低。

行級鎖定:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖定衝突的機率最低,並發度也最高。

頁面鎖定:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,並發度一般

#演算法:

next KeyLocks鎖,同時鎖住記錄(資料),並且鎖住記錄前面的Gap    

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

Recordlock鎖(鎖數據,不鎖Gap)

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

什麼情況下會造成死鎖

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

表格層級鎖定不會產生死鎖.所以解決死鎖主要還是針對於最常用的InnoDB.

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

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

以上是mysql死鎖是怎麼造成的的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多