可以認為MVCC是行級鎖的一個變種,但是它在很多情況下避免了加鎖操作,因此開銷更低。
雖然實現機制有所不同,但大都實現了非阻塞的讀操作,寫操作也只鎖定必要的行。
MVCC的實現是通過保存數據在某個時間點的快照來實現的。
MVCC只在讀提交和可重復讀這兩個隔離級別下工作。
保存這兩個額外的系統版本號,使大多數讀操作都可以不用加鎖,這樣設計使得讀數據操作很簡單,性能很好,並且也能保證只會讀取到符合標准的行,不足之處是每行記錄都需要額外的存儲空間,需要做更多的行檢查工作,以及一些額外的維護工作。
MVCC在RR和RC隔離級別下的區別:
在RR隔離級別下,一個事務只能讀取到事務開始的那個時刻的數據快照,即,別的事務修改並提交的數據在自身沒有提交之前一般讀取不到(加for update語句的select除外,因為這個語句要對數據加X鎖必須讀取最新的數據快照)。
在RC隔離級別下,事務總是讀取數據行的最新快照,即會產生不可重復讀的問題。