聊聊MVCC多版本併發控制

2022-07-18 15:03:29 字數 836 閱讀 6070

一、介紹

mvcc只在rr和rc 2個隔離級別下才能工作。mysql的大多數事務儲存引擎實現的都不是簡單的行級鎖機制。基於提公升併發效能的考慮,它們一般都同時實現了mvcc。

通俗的來講,mvcc是行級鎖的乙個變種,在很多情況下避免了加鎖操作,因此開銷更低。實現了非阻塞的讀操作,寫操作也只鎖定必要的行。

二、功能

是通過儲存資料在某個時間點的快照來實現。

innodb的mvcc,是通過在每行記錄後面儲存2個隱藏的列來實現的。這2個列,乙個儲存了行的建立時間,乙個儲存行的過期時間(或刪除時間),這個時間也叫系統版本號。

每開始乙個新事務系統版本號都會自動遞增。事務開始時刻的系統版本號會作為事務的版本號用來和查詢到的每行記錄的版本號進行比較。

三、rr下具體實現

1.select

a.innodb只查詢版本早當前事務版本的資料行,即行的系統版本號小於或等於事務的系統版本號,這樣可以確保事務讀取的行,要麼是在事務開始前已經存在的,要麼是事務自身插入或者修改過的。

b.行的刪除版本要麼未定義,要麼大於當前事務版本號。這可以確保事務讀取到的行,在事務開始之前未被刪除。

2.insert

innodb為新插入的每一行儲存當前系統版本號作為行版本號。

3.delete

innodb為刪除的每一行儲存當前系統版本號作為行刪除標識。

4.update

innodb為插入一行新記錄,儲存當前系統版本號作為行版本號,同時儲存當前系統版本號到原來的行作為行刪除標識。

四、總結

優點:儲存2個額外系統版本號,使大多數讀操作都可以不用加鎖。這樣設計使得讀資料操作都很簡單,效能很好,也能保證只會讀取到符合標準的行。

多版本併發控制(MVCC)

mysql的大多數事務性儲存引擎 如innodb 實現的都不是簡單的行級鎖。基於提公升併發效能的考慮,它們一般都同時實現了多版本併發控制 mvcc 可以認為mvcc是行級鎖的乙個變種,但是它在很多情況下避免了加鎖操作,因此開銷更低。雖然實現機制有所不同,但大都實現了非阻塞的讀操作,寫操作也只鎖定必要...

多版本併發控制MVCC

大多數mysql的事務性儲存引擎,例如innodb.falcon 和pbxt,不是簡單地使用行加鎖的機制,而是選用一種叫做 多版本併發控制 mvcc,mutiversion concurrency control 的技術,和行加鎖機制關聯使用,以應對更多的併發處理問題。mvcc不是mysql獨有的技...

MVCC(多版本併發控制)

mvcc是資料庫鎖策略的一種實現的統稱。使用mvcc可以在大多數情況下避免加鎖的操作,為服務帶來更好的效率。mysql的大多數事務型儲存引擎實現的都不是簡單的行級鎖。基於提公升併發效能的考慮,它們一般都同時實現了多版本併發控制 mvcc 不同的資料庫實現mvcc的機制不盡相同。我們可以粗略的認為mv...