數據庫多版本併發控制

俗稱 MVCC數據庫

其實就是在數據庫表的每一行記錄的後面增長兩個隱藏列,記錄建立版本號和刪除版本號,而每個事務在啓動的時候,都有一個惟一的遞增的版本號。性能

一、在插入操做時 : 記錄的建立版本號就是事務版本號。圖片

好比我插入一條記錄, 事務id 假設是1 ,那麼記錄以下:也就是說,建立版本號就是事務版本號。事務

輸入圖片說明

二、在更新操做的時候,採用的是先標記舊的那行記錄爲已刪除,而且刪除版本號是事務版本號,而後插入一行新的記錄的方式。it

好比,針對上面那行記錄,事務Id爲2 要把name字段更新table

update table set name= 'new_value' where id=1;date

輸入圖片說明

三、刪除操做的時候,就把事務版本號做爲刪除版本號。好比im

delete from table where id=1;數據

輸入圖片說明

四、查詢操做:查詢

從上面的描述能夠看到,在查詢時要符合如下兩個條件的記錄才能被事務查詢出來:

  1. 刪除版本號 大於 當前事務版本號,就是說刪除操做是在當前事務啓動以後作的。

  2. 建立版本號 小於或者等於 當前事務版本號 ,就是說記錄建立是在事務中(等於的狀況)或者事務啓動以前。

這樣就保證了各個事務互不影響。從這裏也能夠體會到一種提升系統性能的思路,就是:

經過版本號來減小鎖的爭用。

另外,只有read-committed和 repeatable-read 兩種事務隔離級別才能使用mVcc

read-uncommited因爲是讀到未提交的,因此不存在版本的問題

而serializable 則會對全部讀取的行加鎖。

相關文章
相關標籤/搜索