溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MVCC 在RC 和 RR 隔離等級下的工作機制

發(fā)布時間:2020-08-15 17:36:09 來源:ITPUB博客 閱讀:523 作者:wwjfeng 欄目:MySQL數(shù)據(jù)庫

一.數(shù)據(jù)行隱藏列
innodb為每行記錄都實現(xiàn)了三個隱藏字段
6字節(jié)的事務ID(DB_TRX_ID)
7字節(jié)的回滾指針(DB_ROLL_PTR)
隱藏的ID

MVCC 在RC 和 RR 隔離等級下的工作機制

事務1修改行值過程:
X鎖鎖定該行 -> 記錄redo log -> 把該行修改前的值copy至undo -> 修改當前行的值,填寫事務編號,使回滾指針指向undo log中的修改前的行

MVCC 在RC 和 RR 隔離等級下的工作機制

事務2修改行值過程:
與事務1相同,此時undo log,中有有兩行記錄,并且通過回滾指針連在一起

MVCC 在RC 和 RR 隔離等級下的工作機制


二.RC 和 RR 適用MVCC的過程

RC
事務開始
(1).執(zhí)行SQL語句之前,將系統(tǒng)中非當前活躍事務信息輸出到一個副本trx_list
(2).用戶在當前SQL開始讀取記錄,假設讀取到的記錄事務ID為trx_id_0
(3).找出trx_list 中最早的事務trx_id_1 和 最晚的事務trx_id_2
(4).如果trx_id_0<trx_id_1 則表示該行記錄在本sql執(zhí)行之前已經(jīng)commit,所以該行可見。轉(zhuǎn)至(8)</trx_id_1 則表示該行記錄在本sql執(zhí)行之前已經(jīng)commit,所以該行可見。轉(zhuǎn)至(8)<>
(5).如果trx_id_0>trx_id_2 則表示該行記錄在本SQL執(zhí)行之后發(fā)生了其他事務,因此該行不可見。轉(zhuǎn)至(7)
(6).如果trx_id_1<=trx_id_0<=trx_id_2 則表示該行記錄在本SQL開啟時處于活動狀態(tài),因此該行不可見。轉(zhuǎn)至(7)
(7).從該行記錄的DB_ROLL_PTR指針所指向的回滾段中取出最新的undo-log的版本號,將它賦值該trx_id_0,然后跳到步驟(4)
(8).將該行的數(shù)據(jù)返回給用戶,跳轉(zhuǎn)至(2)
(9).所有記錄遍歷完畢,關(guān)閉trx_list,跳轉(zhuǎn)至(1),執(zhí)行下一條SQL
事務結(jié)束

RR
事務開始,將系統(tǒng)中非當前活躍事務信息輸出到一個副本trx_list
(1).執(zhí)行SQL語句
(2).用戶在當前本事務開始讀取記錄,假設讀取到的記錄事務ID為trx_id_0
(3).找出trx_list 中最早的事務trx_id_1 和 最晚的事務trx_id_2
(4).如果trx_id_0<trx_id_1 則表示該行記錄在本事務開啟之前已經(jīng)commit,所以該行可見。轉(zhuǎn)至(8)</trx_id_1 則表示該行記錄在本事務開啟之前已經(jīng)commit,所以該行可見。轉(zhuǎn)至(8)<>
(5).如果trx_id_0>trx_id_2 則表示該行記錄在本事務開啟之后發(fā)生了其他事務,因此該行不可見。轉(zhuǎn)至(7)
(6).如果trx_id_1<=trx_id_0<=trx_id_2 則表示該行記錄在本事務開啟時處于活動狀態(tài),因此該行不可見。轉(zhuǎn)至(7)
(7).從該行記錄的DB_ROLL_PTR指針所指向的回滾段中取出最新的undo-log的版本號,將它賦值該trx_id_0,然后跳到步驟(4)
(8).將該行的數(shù)據(jù)返回給用戶,跳轉(zhuǎn)至(2)
(9).所有記錄遍歷完畢,跳轉(zhuǎn)至(1),執(zhí)行下一條SQL
事務結(jié)束,關(guān)閉trx_list

三.MVCC讀類型
1.快照讀
讀取的是記錄的可見版本,或是從undo中讀取的歷史版本。
普通的查詢即為快照讀

2.當前讀
讀取的是記錄的最新版本,會與dml語句發(fā)生阻塞。
select * from table where ? lock in share mode;
select * from table where ? for update;


轉(zhuǎn)載:
作者: mark_rock 
鏈接:http://www.imooc.com/article/17290?block_id=tuijian_wz
來源:慕課網(wǎng)
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI