mvcc學習記錄

1.mvcc是什麼?數據庫

    多版本併發控制,是MySQL的innoDB引擎實現隔離級別的一種方式,用來實現可重複讀和讀已提交,因爲讀未提交老是讀取最新的數據,無需使用mvcc,而串行化基於mvcc沒法實現,須要加鎖;編程

    主要特色是讀不加鎖,適用於讀多寫少的狀況,所以大多數關係型數據庫都實現了mvcc;segmentfault

2.優勢:數組

    對於讀不加鎖,實現了讀的非阻塞,讀寫不衝突;併發

3.缺點:mvc

    每行數據後都多加了記錄字段,存儲事務版本號和刪除版本號,多耗存儲空間高併發

4.mvcc實現(只針對innoDB):性能

    是在每行記錄後面冗餘兩個字段,建立時間版本號(db_trx_id),刪除版本號(db_roll_id)大數據

5.從高性能MySQL中能夠得知幾個mvcc的注意點spa

  • a.各大數據庫基本都實現了mvcc,只是實現方式各不相同而已,這也能夠理解成面向對象編程的接口
  • b.應對高併發事務,mvcc比加鎖更加高效,畢竟不用加鎖
  • c.mvcc只在讀已提交和可重複讀兩個隔離級別下使用,另外兩個能夠得知不行
  • d.mvcc是被MySQL中事務引擎innoDB所支持的
  • e.mvcc能夠有樂觀鎖和悲觀鎖兩種實現方式 f.其實實現方式不是在每行記錄多加兩個字段,而是三個。。。一會補充

6.快照概念:read view 和快照snapshot

    事務快照的實現細節:事務快照用來存儲數據庫的事務運行狀況,一個事務的建立過程能夠歸納爲:

查看當前全部未提交的活躍中的事務,並存儲在數組中 選取未提交併活躍中的事務的最小的xid,記錄在快照的xmin中(找出最先的一個) 選取全部已提交事務中的最大的xid,加1後記錄在xmax中(找出下一個事務的開始版本號)

 

參考文章地址 解釋說明
https://segmentfault.com/a/1190000012650596?utm_source=tag-newest
相關文章
相關標籤/搜索