欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > MySQL中大對象的多版本并發控制詳解

MySQL中大對象的多版本并發控制詳解

熱門標簽:外呼系統防封號違法嗎 400電話辦理都選易號網 高德地圖標注中心個人注冊 湘潭電銷機器人咨詢電話 外呼系統服務 寶應電信400電話辦理費用 如何在高德地圖標注新地址 高德地圖標注模式 電銷機器人針對的

MySQL 8.0:InnoDB中大對象的MVCC

在本文中,我將解釋MySQL InnoDB存儲引擎中大對象(LOB)設計的多版本并發控制(MVCC) 。 MySQL 8.0有一個新功能,允許用戶部分更新大型對象,包括JSON文檔 。 使用此部分更新功能,當LOB部分更新時,MVCC對LOB的工作方式已發生變化。 對于正常更新(完整更新),MVCC將像以前的版本一樣工作。 讓我們看一下MVCC在不涉及部分更新時的工作原理,然后考慮對LOB進行部分更新的用例。

MVCC 常規更新

我使用術語常規更新來指代不是部分更新的更新。 我將通過一個例子解釋MVCC如何用于常規更新大對象。 我將為此目的使用以下mtr(1)測試用例:

 create table t1 ( f1 int primary key , f2 longblob ) engine = innodb ; 
 insert into t1 values ( 1 , repeat ( 'a' , 65536 ) ) ; 
 
 start transaction ; 
 update t1 set f2 = repeat ( 'b' , 65536 ) where f1 = 1 ; 
 
 -- echo # Connection con1: 
 -- 對于使用MySQL客戶端的用戶,可能需要通過另開一個終端窗口建立新鏈接, 下同。
 connect ( con1 , localhost , root , , ) ; 
 -- echo # Must see the old value 'aaaaaaaaaa' 
 select f1 , right ( f2 , 10 ) from t1 order by f1 ; 
 
 -- echo # Connection default: 
 connection default ; 
 disconnect con1 ; 
 commit ; 
 
 drop table t1 ; 

為了理解下面的解釋,仔細理解上述測試用例非常重要。

測試場景如下:

最初,表t1包含單個記錄(R1)。
事務trx1將記錄更新為新值。
當trx1仍處于活動狀態時,另一個事務trx2正在讀取記錄。 它將讀取舊值。

表t1僅包含一個記錄(R1)。 但是trx1和trx2會看到兩個不同的值。 該表實際上只包含最新值(trx1所見的值),而trx2看到的值或記錄是從撤消日志記錄中獲得的。 讓我們看下面的圖片來更好地理解它。

初始狀態:更新操作之前

下圖顯示了更新操作之前的情況。 撤消日志為空。 表的聚簇索引包含一行。 表中有一個LOB。 聚簇索引記錄包含對LOB的引用。

最終狀態:更新操作后

現在讓我們看一下更新操作后的情況。

以下是一些重要的觀察:

用戶表空間中有兩個LOB - 舊的LOB和新的LOB。 舊的LOB只能通過撤消日志訪問。 聚集索引記錄指向新LOB。
更新操作已創建包含更新向量的撤消日志記錄。 此撤消日志記錄指向舊LOB。
聚簇索引記錄通過DB_ROLL_PTR系統列指向撤消日志記錄。 此滾動指針指向撤消日志記錄,該記錄可用于構建聚簇索引記錄的先前版本。
撤消記錄不包含LOB本身。 而是它只包含對存儲在用戶表空間中的LOB的引用。
存儲在撤消日志記錄中的LOB引用與存儲在聚簇索引記錄中的LOB引用不同。

事務在連接1中采取的步驟如下:

事務查看R1并確定尚未提交修改聚簇索引記錄的事務。 這意味著它無法讀取該記錄(因為默認隔離級別是REPEATABLE READ)。
它查看R1中的DB_ROLL_PTR并找到撤消日志記錄。 使用撤消日志記錄構建R1的先前版本。
它讀取了這個構建的舊版R1。 請注意,此版本在聚簇索引記錄中不可用。 但它使用撤消記錄即時構建。
當R1指向新的LOB時,這個構造的舊版本的R1指向舊的LOB。 所以結果包含舊的LOB。

這是LOB的MVCC在不涉及部分更新時的工作方式。

MVCC部分更新

讓我們看另一個例子,了解MVCC在部分更新的情況下是如何工作的。 我們需要另一個例子,因為目前僅通過函數json_set()和json_replace()支持JSON文檔的部分更新。

 create table t2 ( f1 int primary key , j json ) engine = InnoDB ; 
 set @ elem_a = concat ( '"' , repeat ( 'a' , 200 ) , '"' ) ; 
 set @ elem_a_with_coma = concat ( @ elem_a , ',' ) ; 
 set @ json_doc = concat ( "[" , repeat ( @ elem_a_with_coma , 300 ) , @ elem_a , "]" ) ; 
 
 insert into t2 ( f1 , j ) values ( 1 , @ json_doc ) ; 
 
 start transaction ; 
 update t2 set j = json_set ( j , '$[200]' , repeat ( 'b' , 200 ) ) where f1 = 1 ; 
 
 -- echo # Connection con1: 
 connect ( con1 , localhost , root , , ) ; 
 -- echo # Must see the old value 'aaaaaaaaaa...' 
 select json_extract ( j , '$[200]' ) from t2 ; 
 
 -- echo # Connection default: 
 connection default ; 
 disconnect con1 ; 
 commit ; 

該場景與前面的示例相同。 只是longblob字段已更改為JSON文檔。 加載的數據也略有不同,以符合JSON格式。

提示 :您可以在上述mtr測試用例(兩者中)中添加語句set debug ='+ d,innodb_lob_print' ,以在服務器日志文件中打印LOB索引。 LOB索引將在插入后立即打印。 LOB索引將為您提供存儲的LOB對象的結構。
在部分更新操作之前

完全或部分更新操作之前的初始條件是相同的,并且已經在上面給出。 但是在下圖中,提供了一些附加信息。

讓我們看看圖中顯示的其他信息:

存儲在聚簇索引記錄中的LOB引用現在包含LOB版本號v1。 在初始插入操作期間,將其設置為1,并在每次部分更新時遞增。
每個LOB數據頁面在LOB索引中都有一個條目。 每個條目都包含LOB版本信息。 每當修改一個LOB數據頁時,它將被復制到具有新數據的新LOB數據頁中,并且將創建具有遞增的LOB版本號的新LOB索引條目。

附加信息是LOB版本號。 這在聚集索引記錄中的LOB引用中以及LOB索引的每個條目中都可用。

部分更新操作后

下圖說明了部分更新操作后的情況。

這里最重要的優化是用戶表空間中仍然只有一個LOB。 僅更新需要修改的那些LOB數據頁。 部分更新操作后的這個單個LOB包含舊版本和新版本的LOB。 圖中LOB數據頁面上的v1和v2標簽說明了這一點。

另一個重要的觀察是撤消日志和聚簇索引記錄中的LOB引用指向同一個LOB。 但LOB引用包含不同的版本號。 撤消日志記錄中的LOB引用包含v1(舊版本號),聚簇索引記錄中的LOB引用包含新版本號v2。

LOB版本號的目的

如上所示,具有不同版本號的不同LOB引用指向相同的LOB。 單個LOB包含來自不同版本的部分。 LOB版本號用于獲取各種LOB引用指向的正確版本。 在本節中,我們將了解如何完成此操作。

LOB索引包含組成LOB的LOB頁面列表。 它包含LOB數據頁的頁碼,每個LOB數據頁包含的數據量以及版本號。 此列表的每個節點稱為LOB索引條目。 每個LOB索引條目都包含舊版本的列表。 讓我們看一個說明上述部分更新測試用例的結構的圖。

最初,在完成部分更新之前,LOB索引總共包含4個條目。 四個條目的頁碼是5,6,7和8.沒有LOB索引條目具有舊版本。 所有四個條目的版本號均為1。

部分更新完成后,我們注意到頁碼9已替換頁碼7,頁碼7現在被視為頁碼9的舊版本。頁碼9的版本號為2,并且頁碼7的版本號為1。

部分更新完成后,當通過版本號為1的LOB引用訪問LOB時,將查看第5頁的第一個索引條目。 它的版本號為1.如果索引條目中的版本號小于或等于 LOB引用中的版本號,則將讀取該條目。 因此,將讀取第5頁。 然后將查看頁碼為6的索引條目。 它的版本號為1,因此將被讀取。 然后將查看頁碼為9的索引條目。 它的版本號為2.但是lob引用的版本號為1.如果索引條目中的版本號大于LOB引用中的版本號,則不會讀取該條目。 由于頁碼9的條目具有版本2,因此將查看其舊版本。 將檢查頁碼為7的索引條目。 它的版本號為1,因此將被讀取。 在此之后,將檢查頁碼為8的索引條目。 它的版本號為1,因此也將被讀取。 這是訪問舊版LOB的方式。

部分更新完成后,當通過版本號為2的LOB引用訪問LOB時,將查看第5頁的第一個索引條目。 它的版本號為1.如果索引條目中的版本號小于或等于LOB引用中的版本號,則將讀取該條目。 因此它將按順序讀取頁碼5,6,9,8。 由于版本號始終= 2,因此無需使用舊版本訪問頁碼7。

需要記住的一點是LOB在InnoDB中不是獨立存在的。 它被視為聚簇索引記錄的擴展。LOB對事務是否可見并不由LOB模塊處理。 LOB模塊只是處理聚簇索引記錄。 如果事務訪問LOB,則意味著它已經在聚簇索引記錄中的DB_TRX_ID的幫助下確定它可以查看LOB(而不是LOB的特定版本)。 所以我們不擔心LOB模塊中的那個方面。 我們只專注于為給定的LOB版本號提供正確的內容。

結論

在本文中,我們了解了如何在InnoDB中為大對象完成MVCC。 當對LOB進行部分更新時,多個LOB引用可以指向同一個LOB。 但他們將擁有不同的版本號。 使用這些LOB版本號,可以訪問正確的LOB內容。

希望您發現此信息有用。

謝謝你使用MySQL!

注釋:

(1) Mtr即Mini-transaction的縮寫,字面意思小事物,相對邏輯事物而言,我們把它稱作物理事物。屬于Innodb存儲引擎的底層模塊。主要用于鎖和日志信息。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • 詳解MySQL多版本并發控制機制(MVCC)源碼
  • mysql的MVCC多版本并發控制的實現
  • mysql并發控制原理知識點
  • mysql多版本并發控制MVCC的實現
  • MySQL四種事務隔離級別詳解
  • MySQL 四種事務隔離級別詳解及對比
  • 深入解析MySQL的事務隔離及其對性能產生的影響
  • MySQL中Innodb的事務隔離級別和鎖的關系的講解教程
  • MySQL數據庫事務隔離級別介紹(Transaction Isolation Level)
  • MySQL系列之十 MySQL事務隔離實現并發控制

標簽:南充 佛山 賀州 蘭州 黔南 宿遷 馬鞍山 黃山

巨人網絡通訊聲明:本文標題《MySQL中大對象的多版本并發控制詳解》,本文關鍵詞  MySQL,中大,對象,的,多,版本,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL中大對象的多版本并發控制詳解》相關的同類信息!
  • 本頁收集關于MySQL中大對象的多版本并發控制詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    一区二区三区中文字幕精品精品| 日本黄色三级网站| 99久久久久久久久久| 欧美午夜精品一区二区蜜桃| 中文字幕一区二区三区不卡 | 国产sm调教视频| 欧美刺激午夜性久久久久久久| 午夜亚洲国产au精品一区二区| 无码人妻丰满熟妇区毛片蜜桃精品 | 99久久99久久综合| 色综合久久中文字幕| 亚洲视频一区在线观看| av在线综合网| 欧洲精品中文字幕| 亚洲自拍偷拍九九九| 亚洲911精品成人18网站| 欧美日韩情趣电影| 婷婷综合另类小说色区| 亚洲黄色在线网站| 精品国产一区二区亚洲人成毛片 | 欧美日韩综合不卡| 亚洲午夜在线观看视频在线| 野战少妇38p| 日韩色视频在线观看| 蜜臀精品久久久久久蜜臀| 法国空姐电影在线观看| 国产日韩一级二级三级| 国产91综合一区在线观看| 色哟哟国产精品| 亚洲国产成人高清精品| 在线免费观看污视频| 精品盗摄一区二区三区| 国产精品白丝jk黑袜喷水| 丝袜 亚洲 另类 欧美 重口| 亚洲精品五月天| 亚洲av成人片无码| 精品成人一区二区三区| 成人午夜私人影院| 欧美性猛交xxxxxx富婆| 青青草国产精品亚洲专区无| 福利视频第一页| 亚洲精品日产精品乱码不卡| 国产一级黄色录像| 亚洲精品一区在线观看| 岛国一区二区三区| 欧美日韩国产精选| 久久国产精品区| 卡通动漫亚洲综合| 午夜视频在线观看一区| 摸摸摸bbb毛毛毛片| 亚洲欧美日韩在线| 变态另类丨国产精品| 亚洲国产精品传媒在线观看| 男插女视频网站| 欧美不卡视频一区| 成人97人人超碰人人99| 91精品国产91久久久久久一区二区| 激情六月婷婷久久| 欧美亚洲图片小说| 国内外成人在线| 精品视频资源站| 国产在线看一区| 欧美中文字幕一区二区三区 | 欧美在线不卡视频| 九九视频精品免费| 在线观看网站黄不卡| 久久精品999| 欧美丝袜丝交足nylons图片| 久久99国产精品免费网站| 欧洲av一区二区嗯嗯嗯啊| 精品一区二区影视| 欧美日韩免费一区二区三区视频| 国产一区二区三区观看| 欧美蜜桃一区二区三区| 国产高清亚洲一区| 欧美一区二区三区日韩视频| 成人精品视频一区| 欧美mv日韩mv| 久久久久国产免费| 中文字幕在线观看一区| 在哪里可以看毛片| 亚洲18女电影在线观看| 在线观看亚洲网站| 久久99精品久久久| 欧美精品精品一区| 波多野结衣一区二区三区| 精品成人一区二区三区四区| av免费观看不卡| 亚洲欧洲日韩一区二区三区| 高清国产在线观看| 三级欧美在线一区| 欧美午夜精品理论片a级按摩| 国产精品1区2区| 精品久久人人做人人爰| 午夜男人的天堂| 亚洲综合久久av| 福利所第一导航| 国产一区二区不卡| 欧美大白屁股肥臀xxxxxx| 亚洲av人人澡人人爽人人夜夜| 亚洲欧美另类图片小说| 2014亚洲天堂| 韩国午夜理伦三级不卡影院| 日韩欧美www| 成人在线视频免费播放| 一区二区久久久久久| 欧美色图亚洲视频| 国产精品1024| 国产婷婷色一区二区三区在线| 中文人妻一区二区三区| 午夜精品福利一区二区蜜股av| 欧美在线观看视频一区二区| 99久久久国产精品免费蜜臀| 国产精品―色哟哟| 亚洲欧美卡通动漫| 韩国成人在线视频| 精品国产乱码久久久久久1区2区 | 亚洲精品国产品国语在线app| 三级黄色在线观看| 国产精品一区二区果冻传媒| 久久久久久久久97黄色工厂| 日韩精品电影一区二区| 久久精品免费观看| 精品国产一区二区在线观看| www.久久国产| 美洲天堂一区二卡三卡四卡视频| 欧美一级欧美三级在线观看| 国产夫妻性爱视频| 日日夜夜免费精品视频| 日韩三级电影网址| 欧美一区二区三区成人精品| 日本不卡不码高清免费观看| 日韩一级完整毛片| 国产精品无码午夜福利| 老色鬼精品视频在线观看播放| 精品久久国产字幕高潮| 亚洲色图欧美色| 国产成a人无v码亚洲福利| 国产精品美日韩| 色噜噜狠狠一区二区三区果冻| 成人性视频免费网站| 亚洲男人都懂的| 欧美日韩国产一区二区三区地区| 动漫美女无遮挡免费| 视频一区二区不卡| 久久综合色综合88| 色欲一区二区三区精品a片| 97久久久精品综合88久久| 亚洲香肠在线观看| 日韩精品一区二区三区中文不卡| 三年中国中文观看免费播放| 国产91丝袜在线18| 一区二区三区在线观看网站| 在线成人高清不卡| 亚洲精品国产一区黑色丝袜| 国产一区二区三区久久悠悠色av| 国产精品第一页第二页第三页| 欧美在线高清视频| 精品无码人妻一区| 国产丶欧美丶日本不卡视频| 最新久久zyz资源站| 欧美高清视频不卡网| 日韩一级av毛片| 成人国产精品免费| 亚洲成人资源在线| 久久久久成人黄色影片| 色婷婷精品久久二区二区蜜臀av| 成年人小视频在线观看| 久久99在线观看| 亚洲视频在线观看一区| 欧美一区二区三区视频在线| 综合 欧美 亚洲日本| 99精品国产热久久91蜜凸| 日韩av在线发布| 中文字幕不卡在线观看| 欧美日韩一级黄| 青娱乐国产视频| 91免费视频网址| 蜜桃精品视频在线观看| 国产精品高清亚洲| 欧美一区二区三区四区在线观看| 韩国一级黄色录像| 国产性生活毛片| 国产69精品一区二区亚洲孕妇| 亚洲亚洲人成综合网络| 久久精品人人爽人人爽| 欧美三片在线视频观看| 999久久久国产| 一级少妇精品久久久久久久| 国产高清在线观看免费不卡| 午夜成人在线视频| 成人免费一区二区三区视频| 欧美一区二区三区免费视频| 韩国一级黄色录像| 欧美黑人欧美精品刺激| 波多野洁衣一区| 久久99精品久久久久久久久久久久| 一区二区三区 在线观看视频| 国产亚洲欧美日韩在线一区| 欧美另类高清zo欧美|