鎖機制與InnoDB鎖算法


MyISAM和InnoDB存儲引擎使用的鎖:java

  • MyISAM採用表級鎖(table-level locking)。web

  • InnoDB支持行級鎖(row-level locking)和表級鎖,默認爲行級鎖算法

表級鎖和行級鎖對比:數據庫

  • 表級鎖: MySQL中鎖定 粒度最大 的一種鎖,對當前操做的整張表加鎖,實現簡單,資源消耗也比較少,加鎖快,不會出現死鎖。其鎖定粒度最大,觸發鎖衝突的機率最高,併發度最低,MyISAM和 InnoDB引擎都支持表級鎖。微信

  • 行級鎖: MySQL中鎖定 粒度最小 的一種鎖,只針對當前操做的行進行加鎖。行級鎖能大大減小數據庫操做的衝突。其加鎖粒度最小,併發度高,但加鎖的開銷也最大,加鎖慢,會出現死鎖。併發

InnoDB存儲引擎的鎖的算法有三種:app

  • Record lock:單個行記錄上的鎖編輯器

  • Gap lock:間隙鎖,鎖定一個範圍,不包括記錄自己學習

  • Next-key lock:record+gap 鎖定一個範圍,包含記錄自己flex

相關知識點:

  1. innodb對於行的查詢使用next-key lock

  2. Next-locking keying爲了解決Phantom Problem幻讀問題

  3. 當查詢的索引含有惟一屬性時,將next-key lock降級爲record key

  4. Gap鎖設計的目的是爲了阻止多個事務將記錄插入到同一範圍內,而這會致使幻讀問題的產生

  5. 有兩種方式顯式關閉gap鎖:(除了外鍵約束和惟一性檢查外,其他狀況僅使用record lock) A. 將事務隔離級別設置爲RC B. 將參數innodb_locks_unsafe_for_binlog設置爲1


   
你點的每一個「在看」,我都當成了喜歡

本文分享自微信公衆號 - Java學習提高(javaxuexitisheng)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索