MVCC

筆記來(lái)源:https://www.bilibili.com/video/BV1E44y1B77X?p=1

MVCC

多版本并發(fā)控制扼脐,提高讀寫效率

MVCC的實(shí)現(xiàn),通過保存數(shù)據(jù)在某個(gè)時(shí)間點(diǎn)的快照來(lái)實(shí)現(xiàn)的荸恕。這意味著一個(gè)事務(wù)無(wú)論運(yùn)行多長(zhǎng)時(shí)間专筷,在同一個(gè)事務(wù)里能夠看到數(shù)據(jù)一致的視圖。根據(jù)事務(wù)開始的時(shí)間不同撕攒,同時(shí)也意味著在同一個(gè)時(shí)刻不同事務(wù)看到的相同表里的數(shù)據(jù)可能是不同的陡鹃。

基礎(chǔ)知識(shí)

當(dāng)前讀

讀取的是數(shù)據(jù)的最新版本,總是讀取到最新的數(shù)據(jù)抖坪。

觸發(fā)時(shí)機(jī):

select ... lock in share mode
select ... for update
update ...
delete ...
insert ...
快照讀

讀取的是歷史版本的數(shù)據(jù)萍鲸。

觸發(fā)時(shí)機(jī):

select ...

MVCC

案例演示

image.png

MVCC包含三部分:

第一部分:隱藏字段

每一行記錄上都會(huì)包含幾個(gè)用戶不可見的字段。

  1. DB_TRX_ID 創(chuàng)建或者最后一次修改該記錄的事務(wù) id
  2. DB_ROW_ID 隱藏主鍵 【索引列的選擇過程 主鍵 ---> 唯一鍵 ---> 六字節(jié)的ROW_ID】
  3. DB_ROLL_ID 回滾指針 【指向上一個(gè)對(duì)應(yīng)的歷史記錄】配合 undolog 使用

插入一條記錄的數(shù)據(jù)狀態(tài):

image.png
第二部分:undolog 【回滾日志】

undolog 案例

  1. 事務(wù)1擦俐,插入一條新紀(jì)錄
image.png
  1. 事務(wù)2脊阴,修改插入的記錄,undolog 存儲(chǔ)的是歷史記錄

    注意 當(dāng)前記錄 DB_TRX_ID變?yōu)楫?dāng)前事務(wù) id

    DB_ROLL_PRT 指向上一個(gè)版本記錄

image.png
  1. 事務(wù)3蚯瞧,修改記錄

    存在多個(gè)歷史版本

image.png

小結(jié):

當(dāng)不同的事務(wù)對(duì)同一條記錄做修改的時(shí)候嘿期,會(huì)導(dǎo)致該記錄的undolog 形成一個(gè)線性表,也就是鏈表埋合,鏈表首是最新的歷史記錄备徐,而鏈尾是最早的歷史記錄。

第三部分:readview 【事務(wù)在進(jìn)行快照讀的時(shí)候產(chǎn)生的讀視圖】

readview 包含以下幾部分:

  1. trx_list 當(dāng)前系統(tǒng)活躍的事務(wù)id
  2. up_limit_id 列表中事務(wù)最小id
  3. low_limit_id 系統(tǒng)尚未分配的下一個(gè)事務(wù)id

實(shí)際場(chǎng)景1:

事務(wù)1 事務(wù)2 事務(wù)3 事務(wù)4
開啟事務(wù) 開啟事務(wù) 開啟事務(wù) 開啟事務(wù)
修改某一個(gè)值<br />commit
快照讀

事務(wù)2能否讀取到剛剛修改的記錄值甚颂?

可以讀取到

image.png

可見性判斷

image.png

RC蜜猾、RR readview 生成時(shí)機(jī)

image.png

實(shí)際場(chǎng)景2:

事務(wù)0 事務(wù)1 事務(wù)2 事務(wù)3 事務(wù)4
開啟事務(wù)<br />插入<br />提交 開啟事務(wù) 開啟事務(wù)<br />快照讀 開啟事務(wù) 開啟事務(wù)
修改某一個(gè)值<br />commit
快照讀

事務(wù)2能否讀取到剛剛修改的記錄值秀菱?

不可以讀取到

image.png

可見性判斷1:

當(dāng)事務(wù)2,進(jìn)行第一次快照讀時(shí)【能夠讀取到事務(wù)0蹭睡,插入的數(shù)據(jù)】

image.png

可見性判斷2:

當(dāng)事務(wù)4衍菱,進(jìn)行修改提交之后,事務(wù)2再次進(jìn)行快照讀棠笑,在 RR 隔離級(jí)別下梦碗,不會(huì)重新生成readview,使用的還是之前的readview

image.png

RR 始終讀的是第一次快照讀嗎蓖救?

第五步執(zhí)行的是當(dāng)前讀【快照重新生成洪规,產(chǎn)生了幻讀的問題】,所以更新數(shù)據(jù)為4條循捺。第五步之后再次查詢斩例,查詢的也是四條記錄。

image.png

MySQL事務(wù)的四大特性:

原子性:通過undolog 實(shí)現(xiàn)从橘。

隔離性:通過MVCC 實(shí)現(xiàn)念赶。

持久性:通過redolog 實(shí)現(xiàn)。涉及到二階段體提交

一致性:是數(shù)據(jù)庫(kù)的根本要求恰力,其他三個(gè)特性共同實(shí)現(xiàn)了一致性叉谜。

image.png
二階段提交
image.png

數(shù)據(jù)更新流程:

image.png

如果兩個(gè)日志只有一個(gè)寫成功了,會(huì)出現(xiàn)什么問題踩萎?

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末停局,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子香府,更是在濱河造成了極大的恐慌董栽,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件企孩,死亡現(xiàn)場(chǎng)離奇詭異锭碳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)勿璃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門擒抛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人补疑,你說(shuō)我怎么就攤上這事闻葵。” “怎么了癣丧?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)栈妆。 經(jīng)常有香客問我胁编,道長(zhǎng)厢钧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任嬉橙,我火速辦了婚禮早直,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘市框。我一直安慰自己霞扬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布枫振。 她就那樣靜靜地躺著喻圃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粪滤。 梳的紋絲不亂的頭發(fā)上斧拍,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音杖小,去河邊找鬼肆汹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛予权,可吹牛的內(nèi)容都是我干的昂勉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扫腺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼岗照!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起斧账,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谴返,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后咧织,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗓袱,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年习绢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渠抹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闪萄,死狀恐怖梧却,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情败去,我是刑警寧澤放航,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站圆裕,受9級(jí)特大地震影響广鳍,放射性物質(zhì)發(fā)生泄漏荆几。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一赊时、第九天 我趴在偏房一處隱蔽的房頂上張望吨铸。 院中可真熱鬧,春花似錦祖秒、人聲如沸诞吱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)房维。三九已至,卻和暖如春歌馍,著一層夾襖步出監(jiān)牢的瞬間握巢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工松却, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留暴浦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓晓锻,卻偏偏與公主長(zhǎng)得像歌焦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砚哆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 眾所周知独撇,mysql中讀取方式按照是否需要傳統(tǒng)意義的鎖韵吨,分為鎖定讀和非鎖定讀兩種雪猪。鎖定讀不用多說(shuō)虹蓄,那就一堆算法了咽弦,...
    Whoami令狐沖閱讀 1,105評(píng)論 0 0
  • MVCC mvcc 指的是一種提高并發(fā)的技術(shù)。最早的數(shù)據(jù)庫(kù)系統(tǒng)茅姜,只有讀讀之間可以并發(fā)棘街,讀寫刮吧,寫讀槐秧,寫寫都要阻塞啄踊。引...
    我還是老油條閱讀 622評(píng)論 0 1
  • 前言:事務(wù)的開啟與提交模式 對(duì)于一個(gè)MYSQL數(shù)據(jù)庫(kù)(InnoDB)膀懈,事務(wù)的開啟與提交模式無(wú)非下面這兩種情況: 若...
    Tian_Peng閱讀 9,169評(píng)論 0 6
  • 1.ACID 2.隔離級(jí)別對(duì)應(yīng)的問題 1.SQL標(biāo)準(zhǔn)的情況下 2.這四種事務(wù)隔離級(jí)別是指定的SQL標(biāo)準(zhǔn)顿锰,InnoD...
    zjkdifvpwlkqumn閱讀 222評(píng)論 0 0
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn)撵儿,也就放棄了無(wú)數(shù)的可能乘客。 ...
    yichen大刀閱讀 6,052評(píng)論 0 4