最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中MVCC機(jī)制的實(shí)現(xiàn)原理

 更新時(shí)間:2022年08月10日 09:44:48   作者:亞雷  
這篇文章主要介紹了MySQL中MVCC機(jī)制的實(shí)現(xiàn)原理,MVCC多版本并發(fā)控制,MySQL中一種并發(fā)控制的方法,他主要是為了提高數(shù)據(jù)庫(kù)的讀寫性能,用更好的方式去處理讀寫沖突

前言

MVCC全稱為Multi Version Concurrency Control,直譯為多版本并發(fā)控制,是MySQL中一種并發(fā)控制的方法,他主要是為了提高數(shù)據(jù)庫(kù)的讀寫性能,用更好的方式去處理讀寫沖突。

什么是當(dāng)前讀和快照讀?

在講述MVCC機(jī)制實(shí)現(xiàn)原理之前,我們先了解一下當(dāng)前讀和快照讀

當(dāng)前讀:

其實(shí)也很容易理解,當(dāng)前讀指的就是讀取的是最新的記錄,讀取的時(shí)候還需要保證其他事務(wù)不能修改當(dāng)前記錄,所以會(huì)對(duì)讀取的記錄進(jìn)行加鎖處理

例如:select for update 、update、insert、delete這些操作都是當(dāng)前讀

快照讀:

而快照讀也就是不加鎖的select,不過需要注意的是快照讀的前提是隔離級(jí)別不能是serializable(可串行化),之所以出現(xiàn)快照讀,是基于提高并發(fā)性能的考慮

其實(shí)可以簡(jiǎn)單理解成MVCC就是為了實(shí)現(xiàn)讀寫沖突的時(shí)候不去加鎖

MVCC的實(shí)現(xiàn)原理

其實(shí)在MySQL中每一條記錄都會(huì)有一些隱藏字段,而在MVCC機(jī)制中,用處最大的就是trx_id,roll_pointer分別代表著操作這條記錄的事務(wù)的事務(wù)ID,和回滾指針(指向當(dāng)前記錄行的undo log信息),倘若這條記錄沒有主鍵,還包含一個(gè)隱含的主鍵ID

在每一個(gè)事務(wù)開啟之前,都會(huì)先從數(shù)據(jù)庫(kù)中拿到一個(gè)自增的事務(wù)ID

對(duì)于undo log很明顯這就是一個(gè)日志文件,記錄著insert、update、delete,我們?cè)谶M(jìn)行刪除的時(shí)候,其實(shí)innodb引擎并沒有真正的刪除,其實(shí)是將一個(gè)記錄的一個(gè)隱含字段修改了,讓我們?nèi)ニ阉鞯臅r(shí)候搜索不到,所以我們可以知道在undo log中只存在兩種日志,一種是insert undo log,一種是update undo log

undo log的作用就是為了保存版本鏈,而前面我們說的roll_pointer這個(gè)字段就是指向的這里

為了保證可見性,當(dāng)事務(wù)發(fā)起快照讀的時(shí)候,就會(huì)產(chǎn)生一個(gè)Read View(讀視圖),Read View 保存了當(dāng)前事務(wù)開啟時(shí)所有活躍的事務(wù)列表,或者可以理解為保存了其他事務(wù)的ID列表

Read View有幾個(gè)重要屬性:

  • trx_ids:當(dāng)前系統(tǒng)中活躍的事務(wù)ID
  • low_limit_id:目前出現(xiàn)的最大的事務(wù)ID+1,也就是下一個(gè)將被分配的事務(wù)ID
  • up_limit_id:活躍事務(wù)列表中最小的id
  • creator_trx_id:當(dāng)前事務(wù)的ID

而對(duì)于Read View的可見性規(guī)則:

  • 如果訪問版本事務(wù)id = creator_trx_id 那么證明該事務(wù)操作的就是自己修改過的記錄
  • 如果訪問版本事務(wù)id < up_limit_id 那么證明生成該版本的事務(wù)已經(jīng)提交
  • 如果訪問版本事務(wù)id > low_limit_id,那么表示生成該版本的事務(wù)還沒有提交不能被訪問
  • 如果訪問版本事務(wù)id > up_limit_id 且 id < low_limit_id,那么判斷該事務(wù)id是否在活躍列表中,如果在證明還未提交不能被訪問,反之亦然

到此這篇關(guān)于MySQL中MVCC機(jī)制的實(shí)現(xiàn)原理的文章就介紹到這了,更多相關(guān)MySQL MVCC機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

贺兰县| 河曲县| 九龙县| 从化市| 新宾| 旺苍县| 定襄县| 鄂尔多斯市| 台山市| 定西市| 长治市| 上犹县| 台前县| 兰州市| 天水市| 同江市| 高淳县| 长乐市| 东乡县| 资源县| 西乌珠穆沁旗| 连南| 五家渠市| 耿马| 永清县| 峨山| 大名县| 双鸭山市| 兴业县| 高州市| 新巴尔虎左旗| 岑溪市| 瑞昌市| 连城县| 双鸭山市| 宜兴市| 深水埗区| 炉霍县| 海林市| 乐都县| 宾阳县|