Mysql的MVCC是什么
文章目錄
- MVCC是什么
- MVCC的作用
- MVCC的實現原理
- Read View是什么
- Read View如何判斷某個版本可以訪問
MVCC是什么
MVCC(Multiversion concurrency control)是同一行數據保留多版本的一種方式,進而實現并發控制。
在查詢時,通過read view和版本鏈找到對應版本的數據。
MVCC的作用
提升并發性能。對于高并發場景,MVCC比行級鎖開銷更小
MVCC的實現原理
MVCC的實現依賴于版本鏈,版本鏈通過表的三個隱藏字段實現:
表的某一行記錄示例
它表示id=1,name=張三,age=19的這條行記錄是由事務id=10的事務創建/修改
Read View是什么
read view可以理解為將數據在每個時刻的狀態拍成“照片”記錄下來。當需要獲取時刻t的數據時,就從t時間拍的”照片“上獲取數據。
Read View結構:
Read View如何判斷某個版本可以訪問
例如:
有如下兩個事務
事務id=20的事務將id=1的行記錄的name先改成李四,然后改成王五。
事務id=60的事務對其他表進行一些操作。
此時進行查詢select * from users where id = 1,生成的Read View如下圖:
此時未提交的事務有20和60,所以m_ids為[20,60]
生成該Read View的是查詢語句,所以creator_trx_id=0(一個事務只有對數據庫的數據進行修改操作(增,刪,改)的時候,才會為事務分配一個唯一事務id,查詢操作的事務沒有進行對數據進行修改操作,所以trx_id就是默認的0)
將行記錄的每個版本的trx_id與時間軸對比,判斷此版本是否可以訪問
此時查詢能查詢到的數據應該是name=“張三”,原因如下表:
| 王五 | 符合,但在m_ids中 | 無法訪問 | |||
| 李四 | 同上 | 無法訪問 | |||
| 張三 | 符合 | 可以訪問 |
總結
以上是生活随笔為你收集整理的Mysql的MVCC是什么的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php radio js,如何使用Jav
- 下一篇: bootstrap 取消_学习写个网站(