MySQL多版本並發控制(MVCC)
阿新 • • 發佈:2018-07-27
存在 避免 因此 post 一行 postgre 創建時間 並發控制 數據
MVCC是行級鎖的一個變種,但是它在很多的情況下避免了加鎖操作,因此開銷更低。MySQL,包括Oracle、PostgreSQL都實現了MVCC,雖然每個關系數據庫實現不一樣,但大都是實現了非阻塞的讀操作,寫操作也只鎖定必要的行。
MVCC的實現原理:InnoDB的MVCC的實現原理,是通過在每行記錄後面保存兩個隱藏的列來實現的。這兩個列,一個保存了行的創建時間,一個保存行的過期時間或刪除時間。MVCC實現類型都是有樂觀並發控制和悲觀並發控制。
MVCC下的SELECT、INSERT、DELETE、UPDATE是如何進行操作的:
SELECT:需要滿足兩個條件
1、只查詢行版本號小於當前事務的版本號的行
2、查詢刪除版本大於當前事務的版本號的行、要麽未定義的刪除版本號的行
條件一確保了讀取的行在讀取之前就已經存在了而不是在讀取更新之後的行
條件二確保了在查詢之前未被刪除
條件一和條件二滿足了MySQL隔離級別中的可重復讀
INSERT:
新插入的每一行保存當前系統版本號作為行版本號
DELETE:
每刪除一行保存當前系統版本好作為刪除版本號
UPDATE:
新插入的每一行保存當前系統版本號作為行版本號, 同時保存系統版本號作為原來行的刪除版本(可以看做執行了一次INSERT和一次INSERT操作)
MySQL多版本並發控制(MVCC)