成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊Redo Log是什么?

數(shù)據(jù)庫 MySQL
說到MySQL,有兩塊日志一定繞不開,一個是InnoDB存儲引擎的redo log(重做日志),另一個是MySQL Servce層的 binlog(歸檔日志)。

[[413686]]

本文轉(zhuǎn)載自微信公眾號「程序猿阿星」,作者程序猿阿星。轉(zhuǎn)載本文請聯(lián)系程序猿阿星公眾號。

前言

說到MySQL,有兩塊日志一定繞不開,一個是InnoDB存儲引擎的redo log(重做日志),另一個是MySQL Servce層的 binlog(歸檔日志)。

只要是數(shù)據(jù)更新操作,就一定會涉及它們,今天就來聊聊redo log(重做日志)。

redo log

redo log(重做日志)是InnoDB存儲引擎獨(dú)有的,它讓MySQL擁有了崩潰恢復(fù)能力。

比如MySQL實(shí)例掛了或宕機(jī)了,重啟時,InnoDB存儲引擎會使用redo log恢復(fù)數(shù)據(jù),保證數(shù)據(jù)的持久性與完整性。

上一篇中阿星講過,MySQL中數(shù)據(jù)是以頁為單位,你查詢一條記錄,會從硬盤把一頁的數(shù)據(jù)加載出來,加載出來的數(shù)據(jù)叫數(shù)據(jù)頁,會放入到Buffer Pool中。

后續(xù)的查詢都是先從Buffer Pool中找,沒有命中再去硬盤加載,減少硬盤IO開銷,提升性能。

更新表數(shù)據(jù)的時候,也是如此,發(fā)現(xiàn)Buffer Pool里存在要更新的數(shù)據(jù),就直接在Buffer Pool里更新。

然后會把“在某個數(shù)據(jù)頁上做了什么修改”記錄到重做日志緩存(redo log buffer)里,接著刷盤到redo log文件里。

理想情況,事務(wù)一提交就會進(jìn)行刷盤操作,但實(shí)際上,刷盤的時機(jī)是根據(jù)策略來進(jìn)行的。

小貼士:每條redo記錄由“表空間號+數(shù)據(jù)頁號+偏移量+修改數(shù)據(jù)長度+具體修改的數(shù)據(jù)”組成

刷盤時機(jī)

InnoDB存儲引擎為redo log的刷盤策略提供了innodb_flush_log_at_trx_commit參數(shù),它支持三種策略

  • 設(shè)置為0的時候,表示每次事務(wù)提交時不進(jìn)行刷盤操作
  • 設(shè)置為1的時候,表示每次事務(wù)提交時都將進(jìn)行刷盤操作(默認(rèn)值)
  • 設(shè)置為2的時候,表示每次事務(wù)提交時都只把redo log buffer內(nèi)容寫入page cache

另外InnoDB存儲引擎有一個后臺線程,每隔1秒,就會把redo log buffer中的內(nèi)容寫到文件系統(tǒng)緩存(page cache),然后調(diào)用fsync刷盤。

也就是說,一個沒有提交事務(wù)的redo log記錄,也可能會刷盤。

為什么呢?

因?yàn)樵谑聞?wù)執(zhí)行過程redo log記錄是會寫入redo log buffer中,這些redo log記錄會被后臺線程刷盤。

除了后臺線程每秒1次的輪詢操作,還有一種情況,當(dāng)redo log buffer占用的空間即將達(dá)到innodb_log_buffer_size一半的時候,后臺線程會主動刷盤。

下面是不同刷盤策略的流程圖

  1. innodb_flush_log_at_trx_commit=0 

為0時,如果MySQL掛了或宕機(jī)可能會有1秒數(shù)據(jù)的丟失。

  1. innodb_flush_log_at_trx_commit=1 

為1時, 只要事務(wù)提交成功,redo log記錄就 一定在硬盤里,不會有任何數(shù)據(jù)丟失。

如果事務(wù)執(zhí)行期間MySQL掛了或宕機(jī),這部分日志丟了,但是事務(wù)并沒有提交,所以日志丟了也不會有損失。

  1. innodb_flush_log_at_trx_commit=2 

為2時, 只要事務(wù)提交成功,redo log buffer中的內(nèi)容只寫入文件系統(tǒng)緩存(page cache)。

如果僅僅只是MySQL掛了不會有任何數(shù)據(jù)丟失,但是宕機(jī)可能會有1秒數(shù)據(jù)的丟失。

日志文件組

硬盤上存儲的redo log日志文件不只一個,而是以一個日志文件組的形式出現(xiàn)的,每個的redo日志文件大小都是一樣的。

比如可以配置為一組4個文件,每個文件的大小是1GB,整個redo log日志文件組可以記錄4G的內(nèi)容。

它采用的是環(huán)形數(shù)組形式,從頭開始寫,寫到末尾又回到頭循環(huán)寫,如下圖所示。

在個日志文件組中還有兩個重要的屬性,分別是write pos、checkpoint

  • write pos是當(dāng)前記錄的位置,一邊寫一邊后移
  • checkpoint是當(dāng)前要擦除的位置,也是往后推移

每次刷盤redo log記錄到日志文件組中,write pos位置就會后移更新。

每次MySQL加載日志文件組恢復(fù)數(shù)據(jù)時,會清空加載過的redo log記錄,并把checkpoint后移更新。

write pos和checkpoint之間的還空著的部分可以用來寫入新的redo log記錄。

如果write pos追上checkpoint,表示日志文件組滿了,這時候不能再寫入新的redo log記錄,MySQL得停下來,清空一些記錄,把checkpoint推進(jìn)一下。

本文到此就結(jié)束了,下篇會聊聊binlog(歸檔日志)。

小結(jié)

相信大家都知道redo log的作用和它的刷盤時機(jī)、存儲形式。

現(xiàn)在我們來思考一問題,只要每次把修改后的數(shù)據(jù)頁直接刷盤不就好了,還有redo log什么事。

它們不都是刷盤么?差別在哪里?

  1. 1 Byte = 8bit 
  2. 1 KB = 1024 Byte 
  3. 1 MB = 1024 KB 
  4. 1 GB = 1024 MB 
  5. 1 TB = 1024 GB 

實(shí)際上,數(shù)據(jù)頁大小是16KB,刷盤比較耗時,可能就修改了數(shù)據(jù)頁里的幾Byte數(shù)據(jù),有必要把完整的數(shù)據(jù)頁刷盤嗎?

而且數(shù)據(jù)頁刷盤是隨機(jī)寫,因?yàn)橐粋€數(shù)據(jù)頁對應(yīng)的位置可能在硬盤文件的隨機(jī)位置,所以性能是很差。

如果是寫redo log,一行記錄可能就占幾十Byte,只包含表空間號、數(shù)據(jù)頁號、磁盤文件偏移 量、更新值,再加上是順序?qū)懀运⒈P速度很快。

所以用redo log形式記錄修改內(nèi)容,性能會遠(yuǎn)遠(yuǎn)超過刷數(shù)據(jù)頁的方式,這也讓數(shù)據(jù)庫的并發(fā)能力更強(qiáng)。

其實(shí)內(nèi)存的數(shù)據(jù)頁在一定時機(jī)也會刷盤,我們把這稱為頁合并,講Buffer Pool的時候會對這塊細(xì)說

站在巨人的肩膀上

 

  • 《MySQL實(shí)戰(zhàn)45講》
  • 《從零開始帶你成為MySQL實(shí)戰(zhàn)優(yōu)化高手》
  • 《MySQL是怎樣運(yùn)行的:從根兒上理解MySQL》
  • 《MySQL技術(shù)Innodb存儲引擎》

 

責(zé)任編輯:武曉燕 來源: 程序猿阿星
相關(guān)推薦

2024-06-11 00:00:02

MySQL數(shù)據(jù)庫系統(tǒng)

2024-05-28 00:10:00

JavaMySQL數(shù)據(jù)庫

2021-10-04 09:23:30

Redo日志內(nèi)存

2025-01-20 08:20:00

redo logMySQL數(shù)據(jù)庫

2022-05-17 07:36:38

CSSBFC前端

2010-01-06 09:30:51

Oracle Redo

2021-05-28 11:18:50

MySQLbin logredo log

2021-01-26 13:47:08

MySQL存儲數(shù)據(jù)

2022-08-02 11:29:17

數(shù)據(jù)分析場景RFM

2020-08-20 12:10:42

MySQL日志數(shù)據(jù)庫

2025-02-27 09:30:00

MySQLLog Buffer數(shù)據(jù)庫

2025-01-15 13:19:09

MySQL日志事務(wù)

2023-11-23 13:17:39

MySQL?數(shù)據(jù)庫

2024-05-30 08:03:17

2023-03-29 08:26:06

2022-06-07 00:06:56

數(shù)據(jù)監(jiān)控工具集

2024-03-14 14:18:58

MySQL業(yè)務(wù)設(shè)計事務(wù)

2021-02-09 10:07:23

面試MySQL存儲

2025-06-06 07:02:43

2024-06-26 08:14:43

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 一级毛片视频在线 | 91精品国产欧美一区二区成人 | 国产农村妇女毛片精品久久麻豆 | 午夜精品 | 91综合网 | 久久久久久久久久久国产 | 亚洲欧美激情精品一区二区 | 久久久国产精品 | 国内精品久久久久久影视8 最新黄色在线观看 | 久久久久久久久久一区 | 亚洲精品丝袜日韩 | 国产片网站 | 日韩中文一区二区三区 | a级网站 | 国产精品日韩在线观看一区二区 | 亚洲一区二区在线电影 | 在线一区二区三区 | 国产精品久久久久久久久图文区 | 国产毛片久久久 | 国产视频不卡一区 | 精品国产免费一区二区三区演员表 | 黄色一级免费 | 欧美aaaaa| 成人精品在线观看 | 精品视频在线播放 | 亚洲一区二区三区福利 | 国产一区二区三区www | 99成人精品| 国产高清精品一区二区三区 | 国产一区二区三区四区三区四 | 91欧美精品成人综合在线观看 | 在线观看成人 | 在线91| 91精品国产99久久 | 欧美一区不卡 | 国产精品精品视频一区二区三区 | 成人精品一区二区三区中文字幕 | 毛片久久久 | 中文字幕精品一区二区三区精品 | 一本一道久久a久久精品综合蜜臀 | 伊人激情综合网 |