成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 詳解MySQL中事務的持久性實現(xiàn)原理

詳解MySQL中事務的持久性實現(xiàn)原理

熱門標簽:電話外呼系統(tǒng)改號 南昌三維地圖標注 地圖標注費用是多少 曲靖移動外呼系統(tǒng)公司 百應電話機器人優(yōu)勢 怎樣在地圖標注銷售區(qū)域 外呼系統(tǒng)打電話上限是多少 武漢網(wǎng)絡(luò)外呼系統(tǒng)服務商 啥是企業(yè)400電話辦理

前言

說到數(shù)據(jù)庫事務,大家腦子里一定很容易蹦出一堆事務的相關(guān)知識,如事務的ACID特性,隔離級別,解決的問題(臟讀,不可重復讀,幻讀)等等,但是可能很少有人真正的清楚事務的這些特性又是怎么實現(xiàn)的,為什么要有四個隔離級別。

在之前的文章我們已經(jīng)了解了MySQL中事務的隔離性的實現(xiàn)原理,今天就繼續(xù)來聊一聊MySQL持久性的實現(xiàn)原理。

當然MySQL博大精深,文章疏漏之處在所難免,歡迎批評指正。

說明

MySQL的事務實現(xiàn)邏輯是位于引擎層的,并且不是所有的引擎都支持事務的,下面的說明都是以InnoDB引擎為基準。

InnoDB讀寫數(shù)據(jù)原理

在往下學習之前,我們需要先來了解下InnoDB是怎么來讀寫數(shù)據(jù)的。我們知道數(shù)據(jù)庫的數(shù)據(jù)都是存放在磁盤中的,然后我們也知道磁盤I/O的成本是很大的,如果每次讀寫數(shù)據(jù)都要訪問磁盤,數(shù)據(jù)庫的效率就會非常低。為了解決這個問題,InnoDB提供了 Buffer Pool 作為訪問數(shù)據(jù)庫數(shù)據(jù)的緩沖。

Buffer Pool 是位于內(nèi)存的,包含了磁盤中部分數(shù)據(jù)頁的映射。當需要讀取數(shù)據(jù)時,InnoDB會首先嘗試從Buffer Pool中讀取,讀取不到的話就會從磁盤讀取后放入Buffer Pool;當寫入數(shù)據(jù)時,會先寫入Buffer Pool的頁面,并把這樣的頁面標記為dirty,并放到專門的flush list上,這些修改的數(shù)據(jù)頁會在后續(xù)某個時刻被刷新到磁盤中(這一過程稱為刷臟,由其他后臺線程負責) 。如下圖所示:

這樣設(shè)計的好處是可以把大量的磁盤I/O轉(zhuǎn)成內(nèi)存讀寫,并且把對一個頁面的多次修改merge成一次I/O操作(刷臟一次刷入整個頁面),避免每次讀寫操作都訪問磁盤,從而大大提升了數(shù)據(jù)庫的性能。

持久性定義

持久性是指事務一旦提交,它對數(shù)據(jù)庫的改變就應該是永久性的,接下來的其他操作或故障不應該對本次事務的修改有任何影響。

通過前面的介紹,我們知道InnoDB使用 Buffer Pool  來提高讀寫的性能。但是 Buffer Pool 是在內(nèi)存的,是易失性的,如果一個事務提交了事務后,MySQL突然宕機,且此時Buffer Pool中修改的數(shù)據(jù)還沒有刷新到磁盤中的話,就會導致數(shù)據(jù)的丟失,事務的持久性就無法保證。

為了解決這個問題,InnoDB引入了 redo log來實現(xiàn)數(shù)據(jù)修改的持久化。當數(shù)據(jù)修改時,InnoDB除了修改Buffer Pool中的數(shù)據(jù),還會在redo log 記錄這次操作,并保證redo log早于對應的頁面落盤(一般在事務提交的時候),也就是常說的WAL。若MySQL突然宕機了且還沒有把數(shù)據(jù)刷回磁盤,重啟后,MySQL會通過已經(jīng)寫入磁盤的redo log來恢復沒有被刷新到磁盤的數(shù)據(jù)頁。

實現(xiàn)原理:redo log

為了提高性能,和數(shù)據(jù)頁類似,redo log 也包括兩部分:一是內(nèi)存中的日志緩沖(redo log buffer),該部分日志是易失性的;二是磁盤上的重做日志文件(redo log file),該部分日志是持久的。redo log是物理日志,記錄的是數(shù)據(jù)庫中物理頁的情況 。

當數(shù)據(jù)發(fā)生修改時,InnoDB不僅會修改Buffer Pool中的數(shù)據(jù),也會在redo log buffer記錄這次操作;當事務提交時,會對redo log buffer進行刷盤,記錄到redo log file中。如果MySQL宕機,重啟時可以讀取redo log file中的數(shù)據(jù),對數(shù)據(jù)庫進行恢復。這樣就不需要每次提交事務都實時進行刷臟了。

寫入過程

注意點:

  • 先修改Buffer Pool,后寫 redo log buffer。
  • redo日志比數(shù)據(jù)頁先寫回磁盤:事務提交的時候,會把redo log buffer寫入redo log file,寫入成功才算提交成功(也有其他場景觸發(fā)寫入,這里就不展開了),而Buffer Pool的數(shù)據(jù)由后臺線程在后續(xù)某個時刻寫入磁盤。
  • 刷臟的時候一定會保證對應的redo log已經(jīng)落盤了,也即是所謂的WAL(預寫式日志),否則會有數(shù)據(jù)丟失的可能性。

好處

事務提交的時候,寫入redo log 相比于直接刷臟的好處主要有三點:

刷臟是隨機I/O,但寫redo log 是順序I/O,順序I/O可比隨機I/O快多了,不需要。
刷臟是以數(shù)據(jù)頁(Page)為單位的,即使一個Page只有一點點修改也要整頁寫入;而redo log中只包含真正被修改的部分,數(shù)據(jù)量非常小,無效IO大大減少。
刷臟的時候可能要刷很多頁的數(shù)據(jù),無法保證原子性(例如只寫了一部分數(shù)據(jù)就失敗了),而redo log buffer 向 redo log file 寫log block,是按512個字節(jié),也就是一個扇區(qū)的大小進行寫入,扇區(qū)是寫入的最小單位,因此可以保證寫入是必定成功的。

先寫redo log還是先修改數(shù)據(jù)

一次DML可能涉及到數(shù)據(jù)的修改和redo log的記錄,那它們的執(zhí)行順序是怎么樣的呢?網(wǎng)上的文章有的說先修改數(shù)據(jù),后記錄redo log,有的說先記錄redo log,后改數(shù)據(jù),那真實的情況是如何呢?

首先通過上面的說明我們知道,redo log buffer在事務提交的時候就會寫入redo log file的,而刷臟則是在后續(xù)的某個時刻,所以可以確定的是先記錄redo log,后修改data page(WAL當然是日志先寫啦)。

那接下來的問題就是先寫redo log buffer還是先修改Buffer Pool了。要了解這個問題,我們先要了解InnoDB中,一次DML的執(zhí)行過程是怎么樣的。一次DML的執(zhí)行過程涉及了數(shù)據(jù)的修改,加鎖,解鎖,redo log的記錄和undo log的記錄等,也是需要保證原子性的,而InnoDB通過MTR(Mini-transactions)來保證一次DML操作的原子性。

首先來看MTR的定義:

 An internal phase of InnoDB processing, when making changes at the physical level to internal data structures during DML operations. A Mini-transactions (mtr) has no notion of rollback; multiple Mini-transactionss can occur within a single transaction. Mini-transactionss write information to the redo log that is used during crash recovery. A Mini-transactions can also happen outside the context of a regular transaction, for example during purge processing by background threads. 見 https://dev.mysql.com/doc/refman/8.0/en/glossary.html

MTR 是一個短原子操作,不能回滾,因為它本身就是原子的。數(shù)據(jù)頁的變更必須通過MTR,MTR 會把DML操作對數(shù)據(jù)頁的修改記錄到 redo log里。

下面來簡單看下MTR的過程:

  • MTR初始化的時候會初始化一份 mtr_buf
  • 當修改數(shù)據(jù)時,在對內(nèi)存Buffer Pool中的頁面進行修改的同時,還會生成redo log record,保存在mtr_buf中。
  • 在執(zhí)行mtr_commit函數(shù)提交本MTR的時候,會將mtr_buf中的redo log record更新到redo log buffer中,同時將臟頁添加到flush list,供后續(xù)刷臟使用。在log buffer中,每接收到496字節(jié)的log record,就將這組log record包裝一個12字節(jié)的block header和一個4字節(jié)的block tailer,成為一個512字節(jié)的log block,方便刷盤的時候?qū)R512字節(jié)刷盤。

由此可見,InnoDB是先修改Buffer Pool,后寫redo log buffer的。

恢復數(shù)據(jù)的過程

在任何情況下,InnoDB啟動時都會嘗試執(zhí)行recovery操作。在恢復過程中,需要redo log參與,而如果還開啟了binlog,那就還需要binlog、undo log的參與。因為有可能數(shù)據(jù)已經(jīng)寫入binlog了,但是redo log還沒有刷盤的時候數(shù)據(jù)庫就奔潰了(事務是InnoDB引擎的特性,修改了數(shù)據(jù)不一定提交了,而binlog是MySQL服務層的特性,修改數(shù)據(jù)就會記錄了),這時候就需要redo log,binlog和undo log三者的參與來判斷是否有還沒提交的事務,未提交的事務進行回滾或者提交操作。

下面來簡單說下僅利用redo log恢復數(shù)據(jù)的過程:

  • 啟動InnoDB時,找到最近一次Checkpoint的位置,利用Checkpoint LSN去找大于該LSN的redo log進行日志恢復。
  • 如果中間恢復失敗了也沒影響,再次恢復的時候還是從上次保存成功的Checkpoint的位置繼續(xù)恢復。

Recover過程:故障恢復包含三個階段:Analysis,Redo和Undo。Analysis階段的任務主要是利用Checkpoint及Log中的信息確認后續(xù)Redo和Undo階段的操作范圍,通過Log修正Checkpoint中記錄的Dirty Page集合信息,并用其中涉及最小的LSN位置作為下一步Redo的開始位置RedoLSN。同時修正Checkpoint中記錄的活躍事務集合(未提交事務),作為Undo過程的回滾對象;Redo階段從Analysis獲得的RedoLSN出發(fā),重放所有的Log中的Redo內(nèi)容,注意這里也包含了未Commit事務;最后Undo階段對所有未提交事務利用Undo信息進行回滾,通過Log的PrevLSN可以順序找到事務所有需要回滾的修改。具體見 http://catkang.github.io/2019/01/16/crash-recovery.html

什么是LSN?

LSN也就是log sequence number,也日志的序列號,是一個單調(diào)遞增的64位無符號整數(shù)。redo log和數(shù)據(jù)頁都保存著LSN,可以用作數(shù)據(jù)恢復的依據(jù)。LSN更大的表示所引用的日志記錄所描述的變化發(fā)生在更后面。

什么是Checkpoint?

Checkpoint表示一個保存點,在這個點之前的數(shù)據(jù)頁的修改(log LSNCheckpoint LSN)都已經(jīng)寫入磁盤文件了。InnoDB每次刷盤之后都會記錄Checkpoint,把最新的redo log LSN 記錄到Checkpoint LSN 里,方便恢復數(shù)據(jù)的時候作為起始點的判斷。

以上就是詳解MySQL中事務的持久性實現(xiàn)原理的詳細內(nèi)容,更多關(guān)于MySQL 事務的持久性的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 詳解MySQL中事務隔離級別的實現(xiàn)原理
  • MySQL執(zhí)行事務的語法與流程詳解
  • mysql、oracle默認事務隔離級別的說明
  • MySQL 事務autocommit自動提交操作
  • MySQL 查看事務和鎖情況的常用語句分享
  • MySQL 主從同步,事務回滾的實現(xiàn)原理
  • MySQL數(shù)據(jù)庫事務與鎖深入分析
  • Mysql事務中Update是否會鎖表?
  • 深入理解PHP+Mysql分布式事務與解決方案
  • MySQL如何實現(xiàn)事務的ACID
  • MySQL為什么要避免大事務以及大事務解決的方法

標簽:荊州 甘南 黑河 錦州 滄州 吉林 資陽 隨州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《詳解MySQL中事務的持久性實現(xiàn)原理》,本文關(guān)鍵詞  詳解,MySQL,中,事務,的,持久性,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解MySQL中事務的持久性實現(xiàn)原理》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解MySQL中事務的持久性實現(xiàn)原理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    av网站免费在线| 欧洲一区二区三区| 久久久久久久久久美女| 国内免费久久久久久久久久久| 国产精品一区视频网站| 欧美另类视频在线| 国产精品天天看天天狠| 欧美另类videosbestsex日本| 最新天堂资源在线资源| 色片在线免费观看| 成人丝袜视频网| 97色在线播放视频| 永久免费看mv网站入口78| 成人美女黄网站| 色噜噜夜夜夜综合网| 国精产品视频一二二区| 亚洲色成人www永久在线观看| 中文字幕人妻丝袜乱一区三区| 亚洲av无码一区二区乱子伦| 久久99国产成人小视频| 欧美一二三视频| 成人av国产| 中文在线a√在线8| 精品福利视频导航大全| 国产一二区在线| 亚洲精品美女在线| 国产精品88888| 日本h片在线| 综合色中文字幕| 亚洲高清资源在线观看| 成人免费一区| 国产精品入口久久| 五月婷婷导航| 中文字幕66页| 久久久久91| 香蕉久久国产| 国产精品久久久久免费a∨| 久久精品美女视频| 欧美在线日韩在线| av第一福利大全导航| 91精品福利观看| 欧美图片一区二区| 免费观看毛片网站| 亚洲三级电影网站| 国产精品一卡| 78精品国产综合久久香蕉| 国产精品麻豆一区二区三区| 久久国产一区二区三区| 国产乱人伦精品一区二区三区| 一区二区三区动漫| 最新国产在线精品91尤物| 欧美中文字幕亚洲一区二区va在线| 一区二区三区网站| 亚洲影音一区| 国产精品黄色网| 日本美女高清在线观看免费| 97av视频在线观看| 亚洲国产日韩在线一区| 色猫咪免费人成网站在线观看| 国内精品视频| 91tv在线观看| 亚洲成人福利视频| 欧美jiizzhd精品欧美| 一级做a爰片性色毛片视频| 欧美一区二区三区在线看| 成人影院在线免费观看| 国产三级在线观看| 午夜电影网亚洲视频| www.91av...| 国产人妻精品久久久久野外| 亚洲高清国产拍精品26u| 麻豆精品在线| 日韩久久久久久久久久久久| 美女被c出白浆| 99精品免费观看| 亚洲成人a级网| 亚洲精品韩国| 深夜成人影院| 国产精品久久久久久久久鸭| 不许穿内裤随时挨c调教h苏绵| 岳的好大精品一区二区三区| 国产一区高清视频| 中文字幕永久在线不卡| 国产欧美日韩网站| 国产一二区视频| 2017亚洲天堂1024| 欧美久色视频| 国产无套粉嫩白浆在线2022年| 国产精品国产精品国产专区不片| 天干夜夜爽爽日日日日| 日韩视频在线免费| 国产精品伦一区| 国产精品都在这里| 污免费在线观看| 欧美 日韩 亚洲 一区| 色老板视频在线观看| 国产口爆吞精一区二区| 亚洲一区不卡| 亚洲丰满少妇videoshd| 久久久99精品免费观看不卡| 香港三日本8a三级少妇三级99| 男女污污视频在线观看| 最新eeuss影院在线观看| 欧美成人精品一区二区综合免费| 777精品伊人久久久久大香线蕉| 懂色aⅴ精品一区二区三区| 亚洲男女一区二区三区| 日韩视频永久免费观看| 中文字字幕一区二区三区四区五区| 性爱在线免费视频| 91精品国产高清久久久久久| 91色porny在线视频| caoporn国产精品免费公开| 黄色动漫网站入口| 91久久久国产精品| 中文人妻一区二区三区| 超碰在线99| 久久九九热re6这里有精品| 日本中文字幕在线观看视频| 在线欧美成人| 97色在线观看免费视频| 日本中文字幕在线免费观看| 日韩一级淫片| 欧美在线视频全部完| 亚洲网站视频福利| 国产电影一区二区三区| 久久先锋影音av鲁色资源网| 中文字幕另类日韩欧美亚洲嫩草| 日韩有码电影| 涩涩视频在线观看免费| 欧美三级免费观看| av在线免费网站| 高清欧美精品xxxxx在线看| 日本韩国一区| 国内精品一区二区| 欧美久久99| 欧美专区在线播放| 一个人看免费www视频有多爽| 91九色老女人| 欧美一二三在线| 日韩一级理论片| 视频一区二区在线| 日韩三级在线| 男男一级淫片免费播放| www.日本高清| 国内自拍九色| 在线观看男女av免费网址| 三级毛片在线免费看| 一区二区网站| 网友自拍一区| 亚洲欧洲美洲在线综合| www.亚洲激情.com| 久99九色视频在线观看| 国产中文字幕av| 久久亚洲精品无码va白人极品| 国产香蕉视频在线观看| 欧洲午夜精品久久久| 男人操女人的视频网站| 最新国产在线| 肉色超薄丝袜脚交一区二区| 原创真实夫妻啪啪av| 中文字幕欧美国内| 日韩视频一区二区在线观看| 日日av拍夜夜添久久免费| 精品福利一区二区三区免费视频| 免费看av大片| 欧美日韩一区三区| 51精品国产| 亚洲 国产 日韩 欧美| 国产精品专区一| 亚洲另类在线制服丝袜| 成人黄色在线免费观看| 亚洲欧美一区二区精品久久久| 亚洲a一区二区三区| 波多野结衣视频观看| 欧美日韩激情一区二区三区| 国产高清一区二区三区| 自拍偷拍亚洲一区| 九一免费看片| 国产黄色成人av| 欧美电影一区二区| 国内自拍九色| 亚洲麻豆精品| 最近久乱中文字幕| 久久免费看毛片| 在线你懂的视频| 国产一区成人| 男人插女人下面视频| 久久久久久在线观看| 亚洲品质自拍视频网站| 欧美1区3d| 色综合天天综合网天天狠天天| 亚洲国产1区| 九九热在线免费视频| 福利小视频在线| 黄色精品免费| 男人天堂av在线播放| 黄色动漫在线免费观看| 石原莉奈一区二区三区在线观看| 久久久久久久久精| 久久久777| 精品国产一区二区三区无码| 天堂中文字幕在线观看| 亚洲影视第一页| 韩国日本一区| 天堂在线观看一卡二卡三卡四卡| 最近2019年手机中文字幕| 亚洲欧美另类久久久精品| 国产精品免费一区| 2018中文字幕在线观看| 色在线观看视频| 日韩在线观看不卡| 4480yy私人影院高清不卡| 国产青青草视频| 亚洲高清久久久久久| 免费污网站在线观看| 福利小视频在线| 欧美午夜精彩| 国产精品乱码一区二区三区软件| 狠狠干五月天| jlzzjlzz亚洲日本少妇| 二区三区中文字幕| 成人免费视频一区二区| 亚洲一卡二卡区| 日韩欧美综合一区| 精品国产大片大片大片| 欧美色图另类图片| 国产欧美精品一区二区三区-老狼| 国产精品一区二区免费福利视频| 一区二区日本视频| 国产精品男人爽免费视频1| 亚洲伊人久久大香线蕉av| 懂色av一区二区三区四区五区| 国产日韩欧美自拍| 97caopron在线视频| 免费观看成年在线视频网站| 高清在线视频日韩欧美| 亚洲 欧美 视频| 国产精品一区二区三区在线播放| 亚洲综合色婷婷在线观看| 中文字幕亚洲精品| 97超视频在线观看| 精品国产欧美一区二区| av在线播放国产| 一本高清dvd不卡在线观看| 久久综合伊人77777麻豆| 毛葺葺老太做受视频| 国产精品久久久久久久久久妞妞| 五月花成人网| 亚洲视频国产| 国产精品女主播一区二区三区| 高清在线成人网| 91久久视频| 精品女同一区二区三区| 亚洲福利网站| 伊人影院在线观看视频| 青青青在线视频免费观看| 亚洲人成亚洲人成在线观看图片| 图片小说视频色综合| 国产三级精品在线不卡| 桃花网日韩影视在线观看视频| 捆绑调教日本一区二区三区| www污在线观看| 国产精品麻豆99久久久久久| 欧美午夜www高清视频| 色哟哟一区二区三区| 国产无遮挡呻吟娇喘视频| 中文视频一区| www.激情| 久久bbxx| 97中文在线观看| 日韩成人av在线| 亚洲免费一级电影| 国产精品美女www| 久久香蕉精品香蕉| 免费h视频网站| 一本一道无码中文字幕精品热| 久久精品国内一区二区三区水蜜桃| 国产视频自拍一区| jizzjizzjizz中国免费| 黄色成年人视频在线观看| 91黄色在线看| 日本中文字幕精品| 亚洲夜晚福利在线观看| 久久久综合av| 国产一区二区视频在线播放| 天天看天天色| 国产精品久久久久aaaa| 成人午夜淫片100集| 久久青青草原亚洲av无码麻豆| 欧美一个色资源| 日韩电影在线看| 91精品国产福利在线观看麻豆| 婷婷综合社区| 日本成人黄色| 国产成人精品视频一区| 91亚洲欧美| 人与牲动交xxxxbbbb高清| 91精品国产高久久久久久五月天| 亚洲最大成人网4388xx| 黄网址在线观看| 天天操夜夜添| 婷婷夜色潮精品综合在线| 国产精品成久久久久三级| 国产真实乱全部视频| 久久在线精品| 精品无码久久久久国产| 免费看毛片网站| 91免费高清视频| 91国内揄拍国内精品对白| 菠萝蜜网站在线观看| 美女一区网站| 欧美精品中文字幕亚洲专区| 自拍偷拍亚洲精品| 天天操夜夜操夜夜操| 欧美二区三区的天堂| 欧美变态另类刺激| 亚洲女则毛耸耸bbw| 成人黄色国产精品网站大全在线免费观看| aa亚洲一区一区三区| 日韩视频一区二区三区在线播放| 欧产日产国产精品视频| 日本特黄a级片| 韩曰欧美视频免费观看| 西游记1978| 在线亚洲不卡| 欧美国产激情18| 激情亚洲网站|