色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL中的redo log是什么

數(shù)據(jù)分析與開發(fā) ? 來源:程序猿阿星 ? 作者:程序猿阿星 ? 2021-09-14 09:40 ? 次閱讀

前言

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

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

redo log

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

比如MySQL實例掛了或宕機了,重啟時,InnoDB存儲引擎會使用redo log恢復數(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文件里。

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

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

刷盤時機

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

設置為0的時候,表示每次事務提交時不進行刷盤操作

設置為1的時候,表示每次事務提交時都將進行刷盤操作(默認值)

設置為2的時候,表示每次事務提交時都只把redo log buffer內(nèi)容寫入page cache

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

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

為什么呢?

因為在事務執(zhí)行過程redo log記錄是會寫入redo log buffer中,這些redo log記錄會被后臺線程刷盤。

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

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

innodb_flush_log_at_trx_commit=0

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

innodb_flush_log_at_trx_commit=1

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

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

innodb_flush_log_at_trx_commit=2

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

如果僅僅只是MySQL掛了不會有任何數(shù)據(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是當前記錄的位置,一邊寫一邊后移

checkpoint是當前要擦除的位置,也是往后推移

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

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

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

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

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

小結(jié)

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

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

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

1 Byte = 8bit

1 KB = 1024 Byte

1 MB = 1024 KB

1 GB = 1024 MB

1 TB = 1024 GB

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

而且數(shù)據(jù)頁刷盤是隨機寫,因為一個數(shù)據(jù)頁對應的位置可能在硬盤文件的隨機位置,所以性能是很差。

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

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

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

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)

    關注

    8

    文章

    7006

    瀏覽量

    88951
  • 存儲
    +關注

    關注

    13

    文章

    4298

    瀏覽量

    85808
  • MySQL
    +關注

    關注

    1

    文章

    804

    瀏覽量

    26542

原文標題:聊聊 redo log 是什么?

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    MySQL還能跟上PostgreSQL的步伐嗎

    Percona 的老板 Peter Zaitsev最近發(fā)表一篇博客,討論了MySQL是否還能跟上PostgreSQL的腳步。Percona 作為MySQL 生態(tài)扛旗者,Percona 開發(fā)了知名
    的頭像 發(fā)表于 11-18 10:16 ?200次閱讀
    <b class='flag-5'>MySQL</b>還能跟上PostgreSQL的步伐嗎

    香港云服務器怎么部署MySQL數(shù)據(jù)庫?

    在香港云服務器上部署MySQL數(shù)據(jù)庫的步驟如下: 步驟 1: 更新軟件包列表 首先,確保軟件包列表是最新的。在終端執(zhí)行以下命令: sudo apt update 步驟 2: 安裝 MySQL
    的頭像 發(fā)表于 11-14 16:15 ?159次閱讀

    詳解MySQL多實例部署

    詳解MySQL多實例部署
    的頭像 發(fā)表于 11-11 11:10 ?227次閱讀

    LOG200評估模塊

    電子發(fā)燒友網(wǎng)站提供《LOG200評估模塊.pdf》資料免費下載
    發(fā)表于 11-09 14:23 ?0次下載
    <b class='flag-5'>LOG</b>200評估模塊

    MySQL編碼機制原理

    MyQL 編解碼機制介紹 問題解答 讀者問題簡介 為敘述方便,以下的「我」指代讀者 我們知道在 Java 是通過 ?JDBC 來訪問數(shù)據(jù)庫的,以訪問 MySQL 為例,需要配置以下 url 才能訪問
    的頭像 發(fā)表于 11-09 11:01 ?224次閱讀

    適用于MySQL的dbForge架構(gòu)比較

    dbForge Schema Compare for MySQL 是一種工具,用于輕松有效地比較和部署 MySQL 數(shù)據(jù)庫結(jié)構(gòu)和腳本文件夾差異。該工具提供了 MySQL 數(shù)據(jù)庫架構(gòu)中所有差異的全面視圖。
    的頭像 發(fā)表于 10-28 09:41 ?195次閱讀
    適用于<b class='flag-5'>MySQL</b>的dbForge架構(gòu)比較

    Jtti:MySQL初始化操作如何設置root密碼

    '@'localhost' IDENTIFIED BY 'your_new_password'; ? 刷新權(quán)限以使更改生效: ? FLUSH PRIVILEGES; ? 退出MySQL命令行工具: ? exit ? 從此,您就成功設置了root密碼。在之后的登錄,需要使
    的頭像 發(fā)表于 08-08 16:45 ?362次閱讀

    MySQL知識點匯總

    大家好,這部分被稱為DQL部分,是每個學習MySQL必須要學會的部分,下面就讓我來介紹MySQL的其他部分。
    的頭像 發(fā)表于 08-05 15:27 ?396次閱讀
    <b class='flag-5'>MySQL</b>知識點匯總

    華納云:如何修改MySQL的默認端口

    更改MySQL的默認端口。 理解MySQL配置文件 MySQL的配置文件是控制服務器設置的關鍵。在不同的操作系統(tǒng),這個文件可能位于不同的位置: Linux: /etc/
    的頭像 發(fā)表于 07-22 14:56 ?307次閱讀
    華納云:如何修改<b class='flag-5'>MySQL</b>的默認端口

    MySQL的整體邏輯架構(gòu)

    支持多種存儲引擎是眾所周知的MySQL特性,也是MySQL架構(gòu)的關鍵優(yōu)勢之一。如果能夠理解MySQL Server與存儲引擎之間是怎樣通過API交互的,將大大有利于理解MySQL的核心
    的頭像 發(fā)表于 04-30 11:14 ?449次閱讀
    <b class='flag-5'>MySQL</b>的整體邏輯架構(gòu)

    MySQL忘記root密碼解決方案

    mysql登錄密碼為password()算法加密,解密成本太高,以下為通用方案; 原理:mysql提供了特殊啟動方式,即跳過權(quán)限表驗證,啟動后,登錄不需要提供密碼; 登錄后,即可修改mysql數(shù)據(jù)庫的user表,重置
    的頭像 發(fā)表于 04-23 16:08 ?693次閱讀

    labview 創(chuàng)建mysql 表時 設置時間 怎么在mysql是格式是date 而不是datetime?

    選擇 時間日期 但是在mysql是date而不是datetime類型 ,除了sql語句創(chuàng)建表 ,怎么能實現(xiàn)創(chuàng)建表數(shù)據(jù)為datetime類型
    發(fā)表于 02-04 09:46

    MySQL密碼忘記了怎么辦?MySQL密碼快速重置方法步驟命令示例!

    MySQL密碼忘記了怎么辦?MySQL密碼快速重置方法步驟命令示例! MySQL是一種常用的關系型數(shù)據(jù)庫管理系統(tǒng),如果你忘記了MySQL的密碼,不必擔心,可以通過一些簡單的步驟來快速重
    的頭像 發(fā)表于 01-12 16:06 ?743次閱讀

    如何使用Golang連接MySQL

    首先我們來看如何使用Golang連接MySQL
    的頭像 發(fā)表于 01-08 09:42 ?3356次閱讀
    如何使用Golang連接<b class='flag-5'>MySQL</b>

    mysql密碼忘了怎么重置

    2. 打開MySQL的配置文件my.cnf或my.ini。在Windows上,該文件通常位于MySQL的安裝目錄下的bin文件夾;而在Linux上,該文件通常位
    的頭像 發(fā)表于 12-27 16:51 ?6670次閱讀
    主站蜘蛛池模板: 久久精品av| 国产婷婷午夜无码A片| 处初女处夜情视频在线播放| 高H高肉强J短篇NP| 国产精品网红女主播久久久| 狠狠色在在线视频观看| 久久久久久久尹人综合网亚洲| 老头狠狠挺进小莹体内视频| 欧美人xxxxx| 熟女人妻AV五十路六十路| 亚洲福利电影一区二区?| 樱花动漫成人隐藏入口| free俄罗斯性xxxxhd派对| 国产成在线观看免费视频| 黄色三级在线| 男宿舍里的呻吟h| 特黄特色大片免费播放器试看| 亚洲免费观看视频| 97视频在线播放| 国产产一区二区三区久久毛片国语 | 凹凸精品视频分类视频| 高清大胆欧美videossexo| 含羞草国产亚洲精品岁国产精品| 麻豆人妻换人妻X99| 日日操夜夜操狠狠操| 亚洲精品无码不卡在线播放he| 80岁色老头69av| 琪琪热热色原日韩在线| 天堂无码人妻精品AV一区| 亚洲伊人网站| 川师 最美老师| 黄色三级网站| 日韩一区二区天海翼| 一受多攻高h| 俄罗斯摘花| 久久综合狠狠综合久久综合88| 色老板美国在线观看| 在线免费观看日本| 国产成人精品免费视频软件| 快播看黄片| 亚欧视频在线观看|