1.mvcc是什麼?數據庫
多版本併發控制,是MySQL的innoDB引擎實現隔離級別的一種方式,用來實現可重複讀和讀已提交,因爲讀未提交老是讀取最新的數據,無需使用mvcc,而串行化基於mvcc沒法實現,須要加鎖;編程
主要特色是讀不加鎖,適用於讀多寫少的狀況,所以大多數關係型數據庫都實現了mvcc;segmentfault
2.優勢:數組
對於讀不加鎖,實現了讀的非阻塞,讀寫不衝突;併發
3.缺點:mvc
每行數據後都多加了記錄字段,存儲事務版本號和刪除版本號,多耗存儲空間高併發
4.mvcc實現(只針對innoDB):性能
是在每行記錄後面冗餘兩個字段,建立時間版本號(db_trx_id),刪除版本號(db_roll_id)大數據
5.從高性能MySQL中能夠得知幾個mvcc的注意點spa
6.快照概念:read view 和快照snapshot
事務快照的實現細節:事務快照用來存儲數據庫的事務運行狀況,一個事務的建立過程能夠歸納爲:
查看當前全部未提交的活躍中的事務,並存儲在數組中 選取未提交併活躍中的事務的最小的xid,記錄在快照的xmin中(找出最先的一個) 選取全部已提交事務中的最大的xid,加1後記錄在xmax中(找出下一個事務的開始版本號)
參考文章地址 | 解釋說明 |
https://segmentfault.com/a/1190000012650596?utm_source=tag-newest |