什么是MVCC:
MVCC,Multi-Version Concurrency Control,多版本並發控制。MVCC 是一種並發控制的方法,一般在數據庫管理系統中,實現對數據庫的並發訪問;
基本原理:
MVCC的實現,通過保存數據在某個時間點的快照來實現的。這意味着一個事務無論運行多長時間,在同一個事務里能夠看到數據一致的視圖。根據事務開始的時間不同,同時也意味着在同一個時刻不同事務看到的相同表里的數據可能是不同的。MVCC手段只適用於Msyql隔離級別中的讀已提交(Read committed)和可重復讀(Repeatable Read).
基本特征:
- 每行數據都存在一個版本,每次數據更新時都更新該版本。
- 修改時Copy出當前版本隨意修改,各個事務之間無干擾。
- 保存時比較版本號,如果成功(commit),則覆蓋原記錄;失敗則放棄copy(rollback)
基本實現:
在每一行數據中額外保存兩個隱藏的列:當前行創建時的版本號和刪除時的版本號(可能為空,其實還有一列稱為回滾指針,用於事務回滾,不在本文范疇)。這里的版本號並不是實際的時間值,而是系統版本號。每開始新的事務,系統版本號都會自動遞增。事務開始時刻的系統版本號會作為事務的版本號,用來和查詢每行記錄的版本號進行比較。