Mysql 的 MVCC 實現原理

2021-09-01 01:15:29 字數 680 閱讀 8893

mysql 中mvcc 實現原理,可翻看原始碼檢視

1個6byte的 db_trx_id標識 該行insert或者update操作的最新事務id,刪除操作也被當作乙個update操

作(用1個bit表示刪除)

1個7byte的db_roll_ptr,指向寫到rollback segment的一條undo log記錄(update操作的話,記錄

update前的row值)

1個6byte的db_row_id,該值隨新行插入單調增加,當由innodb自動產生聚集索引時,聚集索引包括這個db_row_id的值,不然的話聚集索引中不包括這個值

那麼這個db_trx_id是實現mvcc策略的關鍵

在repeatable read事務隔離策略下(innodb 預設)

假設 a事務 先於 b事務

在a中select 該行 ,在b中update該行,那麼在b的update先於a的select的情況下

b: 建立 該行的拷貝,設定拷貝的db_trx_id為當前事務,設定原行的delete標誌,並設定db_trx_id為當前事務

a: 檢查該行的db_trx_id ,發現這個值大於a的trx_id,放棄該行,然後檢查該行拷貝的db_trx_id和delete標誌,發現該行在事務開始前沒有被刪除,於是使用該行的拷貝,也就是原來的值

那麼也就實現了不同事務在同一時間看到同一行的不同資料

mvcc原理 MVCC 原理

mvcc 原理 簡單說,讀了一條未提交的資料 乙個事務讀取了另外乙個事務修改後記錄 強調的是 update 和delete 只需要鎖住滿足條件的記錄即可 乙個事務讀取了另外乙個事務插入的資料,強調的是 insert 要鎖住滿足條件及相近的記錄。mysql 中預設的隔離級別是可重複讀,可解決髒讀和不可...

mvcc原理 Innodb的MVCC原理

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

MySQL Innodb的MVCC實現原理

mvcc是multi version concurrency control的縮寫,也就是多版本併發控制。大家都知道,事務的隔離可以通過行鎖來實現。在開啟事務時,對操作記錄加行鎖,事務結束時釋放鎖。但是這樣加鎖會降低事務的併發量,並且對執行緒的阻塞和恢復操作也會損耗效能。那種在事務中使用了selec...