1. 程式人生 > >Mysql中鎖相關解讀

Mysql中鎖相關解讀

        以下是個人對mysql資料庫中鎖相關的一些理解,其中如MVCC、next-key鎖等具體的解釋請搜尋相關資料。資料庫中的鎖並不能用於保證在併發情況下業務資料的安全,還是需要在程式中控制資料的併發操作。

1、鎖的區別 共享鎖(讀鎖、s鎖)和排他鎖(寫鎖、x鎖)是指加鎖的型別(不同作用)。 樂觀鎖和悲觀鎖是指加鎖的方式(不同判斷)。

2、鎖的粒度 表鎖是Mysql中最基本的鎖策略,並且是開銷最小的策略。 行級鎖可以最大程度的支援併發處理。行級鎖只在儲存引擎層實現,而Mysql服務層沒有實現。myisam不支援行級鎖,innodb支援行級鎖。

3、InnoDB中的鎖 innodb中讀、寫鎖都屬於悲觀鎖,innodb中以MVCC的方式實現樂觀鎖。 innodb中讀、寫鎖又分為記錄鎖、間隙鎖、next-key鎖,指加鎖的索引位置。 innodb中使用MVCC可實現讀提交和可重複讀的事務隔離級別。MVCC分快照讀和當前讀,在可重複讀級別時,innodb利用MVCC和undo-log避免快照讀的幻讀,而當前讀還需要加next-key鎖才能避免幻讀。

4、死鎖 死鎖是指兩個或者多個事務在同一資源上相互佔用,並請求鎖定對方佔用的資源,從而導致惡性迴圈的現象。 資料庫系統實現了各種死鎖檢測和死鎖超時機制,innodb若檢測到死鎖的迴圈依賴就會立即返回一個錯誤,若出現死鎖,innodb將持有最少行級寫鎖的事務進行回滾。 檢視死鎖:開啟innodb_lock_monitor後,再使用"showengine innodb status"檢視,能夠找到鎖阻塞的根因。