1. 程式人生 > >MySQL多版本併發控制機制(MVCC)-原始碼淺析

MySQL多版本併發控制機制(MVCC)-原始碼淺析

前言

作為一個數據庫愛好者,自己動手寫過簡單的SQL解析器以及儲存引擎,但感覺還是不夠過癮。<<事務處理-概念與技術>>誠然講的非常透徹,但只能提綱挈領,不能讓你玩轉某個真正的資料庫。感謝cmake,能夠讓我在mac上用xcode去debug MySQL,從而能去領略它的各種實現細節。 
筆者一直對資料庫的隔離性很好奇,此篇部落格就是我debug MySQL過程中的偶有所得。 
(注:本文的MySQL採用的是MySQL-5.6.35版本)

MVCC(多版本併發控制機制)

隔離性也可以被稱作併發控制、可序列化等。談到併發控制首先想到的就是鎖,MySQL通過使用兩階段鎖的方式實現了更新的可序列化,同時為了加速查詢效能,採用了MVCC(Multi Version Concurrency Control)的機制,使得不用鎖也可以獲取一致性的版本。

Repeatable Read

MySQL的通過MVCC以及(Next-Key Lock)實現了可重複讀(Repeatable Read),其思想(MVCC)就是記錄資料的版本變遷,通過精巧的選擇不同資料的版本從而能夠對使用者呈現一致的結果。如下圖所示: 

上圖中,(A=50|B=50)的初始版本為1。 

原文連結