MySQL的MVCC

MVCC(多版本併發控制)

做用:不少狀況下能夠避免加鎖操做,下降開銷。

InnoDB下的MVCC併發

經過在每行記錄後面保存兩個隱藏的列來實現,行的建立時間、行的過時時間(刪除時間)。這裏的時間指的是系統版本號,每開始一個新的事物,系統版本號都會自增。事物開始時刻的系統版本號會做爲事物的版本號,用來和查詢到的每行記錄的版本號進行比較。

REPEATABLE READ隔離級別下MVCC的具體操做性能

SELECT

  • InnoDB 只查找版本早於當前事物版本的數據行(行的系統版本號 <= 事物的系統版本號),這樣能夠確保事物讀取的行,要麼是在事物開始前已經存在的,要麼是事物自身插入或者修改過的。(也就是和其它事物是隔離的)
  • 行的刪除版本要麼未定義,要麼大於當前事物版本號。這樣能夠確保事物讀取到的行,在事物開始以前未被刪除。

符合上面兩個條件的記錄才能返回作完查詢結果。數據

INSERT

  • InnoDB 爲新插入的每一行保存當前系統版本號做爲行版本號。

UPDATE

  • InnoDB 爲插入一行新記錄,保存當前系統版本號做爲行版本號,同時保存當前系統版本號到原來的行做爲行刪除標識。

DELETE

  • InnoDB 爲刪除的每一行保存當前系統版本號做爲刪除標識。
摘自《高性能MySQL》
相關文章
相關標籤/搜索