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