Mysql多版本併發控制(MVCC)是指什麼

2021-09-27 01:25:14 字數 1218 閱讀 8643

我們知道,mysql的innodb採用的是行鎖,而且採用了多版本併發控制來提高讀操作的效能。

什麼是多版本併發控制呢 ?其實就是在每一行記錄的後面增加兩個隱藏列,記錄建立版本號和刪除版本號,

而每乙個事務在啟動的時候,都有乙個唯一的遞增的版本號。 

1、在插入操作時 : 記錄的建立版本號就是事務版本號。 

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

id  

name  

create version  

delete version  

1test  

12、在更新操作的時候,採用的是先標記舊的那行記錄為已刪除,並且刪除版本號是事務版本號,然後插入一行新的記錄的方式。 

比如,針對上面那行記錄,事務id為2 要把name欄位更新

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

id    

name  

create version  

delete version  

1  test  

12        

1  new_value  2

3、刪除操作的時候,就把事務版本號作為刪除版本號。比如

delete from table where id=1; 

id  

name  

create version  

delete version  

1new_value

23  

4、查詢操作: 

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

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

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

這樣就保證了各個事務互不影響。從這裡也可以體會到一種提高系統效能的思路,就是: 

通過版本號來減少鎖的爭用。

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

read-uncommited由於是讀到未提交的,所以不存在版本的問題

而serializable 則會對所有讀取的行加鎖。 

問題1:

1、那我們用什麼辦法能看到兩個隱藏列呢? 

PostgreSQL 多版本併發控制MVCC

什麼是mvcc?mvcc,multi version concurrency control,多版本併發控制,mvcc就是用同乙份資料臨時保留多版本的方式,實現併發控制。它可以避免讀寫事務之間的互相阻塞,相比通常的封鎖技術可極大的提高業務的併發效能。如果有人從資料庫中讀資料的同時,有另外的人寫入資料...

Mysql多版本併發控制

mysql的絕大多數事務型儲存引擎都不是簡單的行級鎖。他們實現了多版本的併發控制,也就是mvvc,當然,支援mvvc的資料庫並不只有mysql,orcale postgresql等都實現了mvvc,只不過他們實現的方式不同而已,因為mvvc沒有乙個統一的規範。其實mvvc可以理解為行級鎖的一種變異,...

MySQL 架構 多版本併發控制

大部分的mysql的儲存引擎,比如innodb,falcon,以及pbxt並不是簡簡單單的使用行鎖機制。它們都使用了行鎖結合一種提高併發的技術,被稱為mvcc 多版本併發控制 mvcc並不單單應用在mysql中,其他的資料庫如oracle,postgresql,以及其他資料庫也使用這個技術。mvcc...