MVCC 實現

為什麼要使用MVCC技術?

數據庫在不同的隔離級別下需要解決

不可重複讀 和 幻讀 的問題。其實通過鎖的方式就可以解決,但是鎖的問題是性能太差。MVCC解決了這個問題,同時實現了高性能。

MVCC在Mysql中的實現:

  • SELECT時,讀取創建版本號<=當前事務版本號,刪除版本號為空或>當前事務版本號。
  • INSERT時,保存當前事務版本號為行的創建版本號
  • DELETE時,保存當前事務版本號為行的刪除版本號
  • UPDATE時,插入一條新紀錄,保存當前事務版本號為行創建版本號,同時保存當前事務版本號到原來刪除的行
  • MVCC解決了幻讀問題了嗎?

    答案是沒有。mvcc只是解決了一部分幻讀的問題,也就是幻讀中的讀問題(因為是快照讀)。

    MySQL在RR級別下是通過gap lock解決了當前讀情況下的幻讀問題。

    事務的隔離級別只涉及到了讀的問題。並沒有涉及到寫的問題。


    分享到:


    相關文章: