mvcc原理 MVCC 原理

2021-10-14 03:43:24 字數 2380 閱讀 1630

mvcc 原理

簡單說,讀了一條未提交的資料

乙個事務讀取了另外乙個事務修改後記錄 強調的是 update 和delete ,只需要鎖住滿足條件的記錄即可

乙個事務讀取了另外乙個事務插入的資料,強調的是 insert ,要鎖住滿足條件及相近的記錄。

mysql 中預設的隔離級別是可重複讀,可解決髒讀和不可重複讀的問題。但是不能解決幻讀的問題。 oracle 預設的是read commit 讀已提交,可以避免髒讀的問題。

一般解決不可重複讀和幻讀問題,是採用鎖機制實現,有沒有一種樂觀鎖的問題去處理,可以採用 mvcc 機制的設計,可以用來解決這個問題。取代行鎖,降低系統開銷。

mvcc 的英文全稱是 multiversion concurrency control ,中文意思是多版本併發控制技術。原理是,通過資料行的多個版本管理來實現資料庫的併發控制,簡單來說就是儲存資料的歷史版本。可以通過比較版本號決定資料是否顯示出來。讀取資料的時候不需要加鎖可以保證事務的隔離效果。

快照讀,讀取的是快照資料,不加鎖的簡單 select 都屬於快照讀.

select * from player where ...
當前讀就是讀的是最新資料,而不是歷史的資料,加鎖的 select,或者對資料進行增刪改都會進行當前讀。

select * from player lock in share mode;select from player for update;insert into player values ...delete from player where ...update player set ...
innodb 是如何儲存記錄多個版本的?這些資料是 事務版本號,行記錄中的隱藏列和undo log。

每開啟乙個日誌,都會從資料庫中獲得乙個事務id(也稱為事務版本號),這個事務 id 是自增的,通過 id 大小,可以判斷事務的時間順序。

row_id :隱藏的行 id ,用來生成預設的聚集索引。如果建立資料表時沒指定聚集索引,這時 innodb 就會用這個隱藏 id 來建立聚集索引。採用聚集索引的方式可以提公升資料的查詢效率。

trx_id: 操作這個資料事務 id ,也就是最後乙個對資料插入或者更新的事務 id 。

roll_ptr:回滾指標,指向這個記錄的 undo log 資訊。

innodb 將行記錄快照儲存在 undo log 裡。

資料行通過快照記錄都通過鍊錶的結構的串聯了起來,每個快照都儲存了 trx_id 事務id,如果要找到歷史快照,就可以通過遍歷回滾指標的方式進行查詢。

如果乙個事務要查詢行記錄,需要讀取哪個版本的行記錄呢? read view 就是來解決這個問題的。read view 可以幫助我們解決可見性問題。 read view 儲存了當前事務開啟時所有活躍的事務列表。換個角度,可以理解為:read view 儲存了不應該讓這個事務看到的其他事務 id 列表。

trx_ids 系統當前正在活躍的事務id集合。

low_limit_id ,活躍事務的最大的事務 id。

up_limit_id 活躍的事務中最小的事務 id。

creator_trx_id,建立這個 readview 的事務id。

如果當前事務的 creator_trx_id 想要讀取某個行記錄,這個行記錄id 的trx_id ,這樣會有以下的情況:

獲取事務自己的版本號,即 事務id

獲取 read view

查詢得到的資料,然後 read view 中的事務版本號進行比較。

如果不符合 readview 規則, 那麼就需要 undolog 中歷史快照;

最後返回符合規則的資料

innodb 實現多版本控制 (mvcc)是通過 readview+ undolog 實現的,undolog 儲存了歷史快照,readview 規則幫助判斷當前版本的資料是否可見。

程式設計師開發者社群

程式設計師開發者社群

本文使用mdnice排版

mvcc原理 Innodb的MVCC原理

該文章是 innodb的mvcc簡介 中的細節作出解釋。在mvcc出現之前的資料庫,為了實現一致性讀,如sqlserver,db2均採用鎖定讀技術,寫操作往往會阻塞讀操作,導致資料庫併發效能不高。oracle與postgre相繼推出自己的多版本併發控制技術,這一技術的核心是在發生讀寫衝突時候,讀操作...

mvcc原理 MySQL MVCC原理

1 mvcc基本原理 mvcc 多版本併發控制 mvcc,multiversion currency control 一般情況下,事務性儲存引擎不是只使用表鎖,行加鎖的處理資料,而是結合了mvcc機制,以處理更多的併發問題。mvcc處理高併發能力最強,但系統開銷 比最大 較表鎖 行級鎖 這是最求高併...

mvcc原理 MySql事務以及MVCC機制與原理

事務 事務是一組原子性sql查詢語句,被當作乙個工作單元。若mysql對改事務單元內的所有sql語句都正常的執行完,則事務操作視為成功,所有的sql語句才對資料生效,若sql中任意不能執行或出錯則事務操作失敗,所有對資料的操作則無效 通過回滾恢復資料 事務有四個屬性原子性 事務被認為不可分的乙個工作...