日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

mysql的MVCC多版本并發(fā)控制的實現(xiàn)

瀏覽:282日期:2023-10-03 18:51:30
1 什么是MVCC

MVCC全稱是: Multiversion concurrency control,多版本并發(fā)控制,提供并發(fā)訪問數(shù)據(jù)庫時,對事務內(nèi)讀取的到的內(nèi)存做處理,用來避免寫操作堵塞讀操作的并發(fā)問題。

舉個例子,程序員A正在讀數(shù)據(jù)庫中某些內(nèi)容,而程序員B正在給這些內(nèi)容做修改(假設是在一個事務內(nèi)修改,大概持續(xù)10s左右),A在這10s內(nèi) 則可能看到一個不一致的數(shù)據(jù),在B沒有提交前,如何讓A能夠一直讀到的數(shù)據(jù)都是一致的呢?

有幾種處理方法,第一種: 基于鎖的并發(fā)控制,程序員B開始修改數(shù)據(jù)時,給這些數(shù)據(jù)加上鎖,程序員A這時再讀,就發(fā)現(xiàn)讀取不了,處于等待情況,只能等B操作完才能讀數(shù)據(jù),這保證A不會讀到一個不一致的數(shù)據(jù),但是這個會影響程序的運行效率。還有一種就是:MVCC,每個用戶連接數(shù)據(jù)庫時,看到的都是某一特定時刻的數(shù)據(jù)庫快照,在B的事務沒有提交之前,A始終讀到的是某一特定時刻的數(shù)據(jù)庫快照,不會讀到B事務中的數(shù)據(jù)修改情況,直到B事務提交,才會讀取B的修改內(nèi)容。

一個支持MVCC的數(shù)據(jù)庫,在更新某些數(shù)據(jù)時,并非使用新數(shù)據(jù)覆蓋舊數(shù)據(jù),而是標記舊數(shù)據(jù)是過時的,同時在其他地方新增一個數(shù)據(jù)版本。因此,同一份數(shù)據(jù)有多個版本存儲,但只有一個是最新的。

MVCC提供了 時間一致性的 處理思路,在MVCC下讀事務時,通常使用一個時間戳或者事務ID來確定訪問哪個狀態(tài)的數(shù)據(jù)庫及哪些版本的數(shù)據(jù)。讀事務跟寫事務彼此是隔離開來的,彼此之間不會影響。假設同一份數(shù)據(jù),既有讀事務訪問,又有寫事務操作,實際上,寫事務會新建一個新的數(shù)據(jù)版本,而讀事務訪問的是舊的數(shù)據(jù)版本,直到寫事務提交,讀事務才會訪問到這個新的數(shù)據(jù)版本。

MVCC有兩種實現(xiàn)方式,第一種實現(xiàn)方式是將數(shù)據(jù)記錄的多個版本保存在數(shù)據(jù)庫中,當這些不同版本數(shù)據(jù)不再需要時,垃圾收集器回收這些記錄。這個方式被PostgreSQL和Firebird/Interbase采用,SQL Server使用的類似機制,所不同的是舊版本數(shù)據(jù)不是保存在數(shù)據(jù)庫中,而保存在不同于主數(shù)據(jù)庫的另外一個數(shù)據(jù)庫tempdb中。第二種實現(xiàn)方式只在數(shù)據(jù)庫保存最新版本的數(shù)據(jù),但是會在使用undo時動態(tài)重構舊版本數(shù)據(jù),這種方式被Oracle和MySQL/InnoDB使用。

2、InnoDB的MVCC實現(xiàn)機制

MVCC可以認為是行級鎖的一個變種,它可以在很多情況下避免加鎖操作,因此開銷更低。MVCC的實現(xiàn)大都都實現(xiàn)了非阻塞的讀操作,寫操作也只鎖定必要的行。InnoDB的MVCC實現(xiàn),是通過保存數(shù)據(jù)在某個時間點的快照來實現(xiàn)的。一個事務,不管其執(zhí)行多長時間,其內(nèi)部看到的數(shù)據(jù)是一致的。也就是事務在執(zhí)行的過程中不會相互影響。下面我們簡述一下MVCC在InnoDB中的實現(xiàn)。

InnoDB的MVCC,通過在每行記錄后面保存兩個隱藏的列來實現(xiàn):一個保存了行的創(chuàng)建時間,一個保存行的過期時間(刪除時間),當然,這里的時間并不是時間戳,而是系統(tǒng)版本號,每開始一個新的事務,系統(tǒng)版本號就會遞增。在RR隔離級別下,MVCC的操作如下:

select操作。

InnoDB只查找版本早于(包含等于)當前事務版本的數(shù)據(jù)行。可以確保事務讀取的行,要么是事務開始前就已存在,或者事務自身插入或修改的記錄。

行的刪除版本要么未定義,要么大于當前事務版本號。可以確保事務讀取的行,在事務開始之前未刪除。

insert操作。將新插入的行保存當前版本號為行版本號。

delete操作。將刪除的行保存當前版本號為刪除標識。

update操作。變?yōu)閕nsert和delete操作的組合,insert的行保存當前版本號為行版本號,delete則保存當前版本號到原來的行作為刪除標識。

由于舊數(shù)據(jù)并不真正的刪除,所以必須對這些數(shù)據(jù)進行清理,innodb會開啟一個后臺線程執(zhí)行清理工作,具體的規(guī)則是將刪除版本號小于當前系統(tǒng)版本的行刪除,這個過程叫做purge。

3、簡單的小例子

create table yang( id int primary key auto_increment, name varchar(20));}

假設系統(tǒng)的版本號從1開始.

INSERT

InnoDB為新插入的每一行保存當前系統(tǒng)版本號作為版本號.第一個事務ID為1;

start transaction;insert into yang values(NULL,’yang’) ;insert into yang values(NULL,’long’);insert into yang values(NULL,’fei’);commit;

對應在數(shù)據(jù)中的表如下(后面兩列是隱藏列,我們通過查詢語句并看不到)

mysql的MVCC多版本并發(fā)控制的實現(xiàn)

SELECT

 InnoDB會根據(jù)以下兩個條件檢查每行記錄: a.InnoDB只會查找版本早于當前事務版本的數(shù)據(jù)行(也就是,行的系統(tǒng)版本號小于或等于事務的系統(tǒng)版本號),這樣可以確保事務讀取的行,要么是在事務開始前已經(jīng)存在的,要么是事務自身插入或者修改過的. b.行的刪除版本要么未定義,要么大于當前事務版本號,這可以確保事務讀取到的行,在事務開始之前未被刪除.  只有a,b同時滿足的記錄,才能返回作為查詢結果.

DELETE

 InnoDB會為刪除的每一行保存當前系統(tǒng)的版本號(事務的ID)作為刪除標識. 看下面的具體例子分析: 第二個事務,ID為2;

start transaction;select * from yang; //(1)select * from yang; //(2)commit;

假設1

假設在執(zhí)行這個事務ID為2的過程中,剛執(zhí)行到(1),這時,有另一個事務ID為3往這個表里插入了一條數(shù)據(jù);第三個事務ID為3;

start transaction;insert into yang values(NULL,’tian’);commit;

這時表中的數(shù)據(jù)如下:

mysql的MVCC多版本并發(fā)控制的實現(xiàn)

然后接著執(zhí)行事務2中的(2),由于id=4的數(shù)據(jù)的創(chuàng)建時間(事務ID為3),執(zhí)行當前事務的ID為2,而InnoDB只會查找事務ID小于等于當前事務ID的數(shù)據(jù)行,所以id=4的數(shù)據(jù)行并不會在執(zhí)行事務2中的(2)被檢索出來,在事務2中的兩條select 語句檢索出來的數(shù)據(jù)都只會下表:

mysql的MVCC多版本并發(fā)控制的實現(xiàn)

 假設2

假設在執(zhí)行這個事務ID為2的過程中,剛執(zhí)行到(1),假設事務執(zhí)行完事務3后,接著又執(zhí)行了事務4;第四個事務:

start transaction; delete from yang where id=1;commit;

此時數(shù)據(jù)庫中的表如下:

mysql的MVCC多版本并發(fā)控制的實現(xiàn)

接著執(zhí)行事務ID為2的事務(2),根據(jù)SELECT 檢索條件可以知道,它會檢索創(chuàng)建時間(創(chuàng)建事務的ID)小于當前事務ID的行和刪除時間(刪除事務的ID)大于當前事務的行,而id=4的行上面已經(jīng)說過,而id=1的行由于刪除時間(刪除事務的ID)大于當前事務的ID,所以事務2的(2)select * from yang也會把id=1的數(shù)據(jù)檢索出來.所以,事務2中的兩條select 語句檢索出來的數(shù)據(jù)都如下:

mysql的MVCC多版本并發(fā)控制的實現(xiàn)

UPDATEInnoDB執(zhí)行UPDATE,實際上是新插入了一行記錄,并保存其創(chuàng)建時間為當前事務的ID,同時保存當前事務ID到要UPDATE的行的刪除時間.

 假設3假設在執(zhí)行完事務2的(1)后又執(zhí)行,其它用戶執(zhí)行了事務3,4,這時,又有一個用戶對這張表執(zhí)行了UPDATE操作: 第5個事務:

start transaction;update yang set name=’Long’ where id=2;commit;

根據(jù)update的更新原則:會生成新的一行,并在原來要修改的列的刪除時間列上添加本事務ID,得到表如下:

mysql的MVCC多版本并發(fā)控制的實現(xiàn)

繼續(xù)執(zhí)行事務2的(2),根據(jù)select 語句的檢索條件,得到下表:

mysql的MVCC多版本并發(fā)控制的實現(xiàn)

還是和事務2中(1)select 得到相同的結果.

到此這篇關于mysql的MVCC多版本并發(fā)控制的實現(xiàn)的文章就介紹到這了,更多相關mysql MVCC多版本并發(fā)控制內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美aa国产视频| 精品一区二区三区的国产在线观看| 婷婷激情久久| 久久免费影院| 蜜乳av另类精品一区二区| 另类小说一区二区三区| 国产成年精品| 综合激情视频| av亚洲免费| 日韩在线精品| 黑人精品一区| 国产精品一区二区精品视频观看 | 国产一区二区三区四区五区传媒 | 免费精品视频| 欧美~级网站不卡| 久久久久久婷| 国产日韩视频在线| 亚洲综合日韩| 欧美中文日韩| 蜜芽一区二区三区| 亚洲97av| 中文字幕一区二区三区在线视频| 麻豆成人在线观看| 模特精品在线| 免费精品国产| 激情六月综合| 亚洲精品一区二区妖精| 老司机免费视频一区二区| 国产精品亚洲欧美一级在线| 国产日韩一区二区三区在线| 69堂免费精品视频在线播放| 国产精品一区二区精品| 日本久久精品| 欧美日韩中文一区二区| 中文在线不卡| 日韩精品视频一区二区三区| 日本午夜精品久久久久| 国产精品美女久久久| 日产欧产美韩系列久久99| 天堂成人免费av电影一区| 少妇精品久久久一区二区| 日韩激情啪啪| 久久免费黄色| 久久99高清| 欧美日韩精品免费观看视频完整| 在线看片不卡| 日韩高清不卡一区二区| 粉嫩av一区二区三区四区五区 | 久久av日韩| 亚洲先锋成人| 日韩高清不卡一区二区| 日韩成人高清| 久久亚洲视频| 国产成人免费精品| 亚洲精品福利| 91成人超碰| 久久这里只有| 伊人www22综合色| av在线最新| 国产精品丝袜在线播放| 视频一区视频二区中文字幕| 成人影视亚洲图片在线| 日本亚州欧洲精品不卡| 日韩成人亚洲| 国产精品久av福利在线观看| 亚洲二区三区不卡| 国产一区二区精品久| 香蕉久久久久久| 免播放器亚洲| 9国产精品视频| 九九精品调教| 卡一精品卡二卡三网站乱码| 午夜亚洲福利| 午夜久久av| 日韩精品一区二区三区中文字幕| 久久福利一区| 免费在线看一区| 视频一区欧美日韩| 亚洲免费激情| 亚洲黄色免费看| 国产aa精品| 国产第一亚洲| 国产成人免费视频网站视频社区| 国产乱码精品一区二区三区四区 | 国产精品xxx在线观看| 在线亚洲激情| 久久大逼视频| 蜜臀av亚洲一区中文字幕| 中文在线日韩| 欧美三级第一页| 久久99国产精品视频| 欧美精品二区| 日本一区二区高清不卡| 欧美国产美女| 激情欧美亚洲| 中文字幕av一区二区三区人| 91免费精品国偷自产在线在线| 欧美日韩调教| 国产精品成人一区二区不卡| 91精品精品| 日韩中文字幕一区二区三区| 日韩精品高清不卡| 国产欧美日韩影院| 麻豆视频一区二区| 欧美一级鲁丝片| 99国产精品久久久久久久 | 欧美日韩日本国产亚洲在线| 亚洲制服少妇| 日韩国产欧美三级| 精品视频一二| 国产一区导航| 欧美三区不卡| 日本а中文在线天堂| 自由日本语亚洲人高潮| 国产亚洲一区| 久久久久久久久久久9不雅视频| 蜜桃免费网站一区二区三区| 国产成人精品福利| 国产日韩欧美一区二区三区在线观看| 久久久久久久久久久妇女| 伊人久久大香伊蕉在人线观看热v| 亚洲我射av| 成人羞羞视频在线看网址| 亚洲影视一区二区三区| 中文字幕在线视频网站| 日韩区一区二| 免费视频一区三区| 国产精品对白| 日韩视频精品在线观看| 久久99青青| 国产精品美女久久久| 国产成人免费精品| 日韩欧美中文字幕电影| 婷婷丁香综合| 精品欧美日韩精品| 青草国产精品| 久久午夜精品一区二区| 精品日韩视频| 1024精品一区二区三区| 欧美日韩精品免费观看视频完整| 伊人网在线播放| 精品伊人久久久| 天堂久久一区| 日韩中文字幕亚洲一区二区va在线 | 久久中文字幕av| 免费精品一区| 欧美激情 亚洲a∨综合| 国产精品白丝久久av网站| 国产欧美日韩一区二区三区四区| 亚洲v天堂v手机在线| 免费久久99精品国产| 日本伊人久久| 国产伦理一区| 精品国产网站| 国产精品亚洲综合在线观看| 国产精品66| 久久精品亚洲一区二区| 三上亚洲一区二区| 国产精选在线| 欧美成人亚洲| 午夜在线精品偷拍| 亚洲久草在线| 黄色网一区二区| 欧美日韩中文一区二区| 麻豆9191精品国产| 丝袜国产日韩另类美女| 日韩精品一级| 97精品一区二区| 日本免费一区二区三区四区| 高清久久一区| 91精品国产福利在线观看麻豆| 男女男精品视频网| 精品中国亚洲| av不卡在线| 国产欧美一区二区精品久久久| 成人在线视频中文字幕| 一区二区视频欧美| 国产一卡不卡| 欧美二区视频| 国产精品亚洲成在人线| 欧美va天堂在线| 国产成人精品亚洲日本在线观看| 日韩精品一区二区三区中文| 合欧美一区二区三区| 久久久久久久欧美精品| 欧美aⅴ一区二区三区视频| 精品日韩毛片| 国产色噜噜噜91在线精品 | 国产精品久久久久av蜜臀 | 色狠狠一区二区三区| 水蜜桃久久夜色精品一区| 91久久午夜| 韩国一区二区三区视频| 在线看片一区| 亚洲综合婷婷| 日韩中文字幕| 樱桃成人精品视频在线播放| 91一区二区| 国产精品v亚洲精品v日韩精品| 久热精品在线|