在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

MySQL中的redo log是什么

數據分析與開發 ? 來源:程序猿阿星 ? 作者:程序猿阿星 ? 2021-09-14 09:40 ? 次閱讀

前言

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

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

redo log

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

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

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

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

更新表數據的時候,也是如此,發現Buffer Pool里存在要更新的數據,就直接在Buffer Pool里更新。

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

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

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

刷盤時機

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

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

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

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

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

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

為什么呢?

因為在事務執行過程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秒數據的丟失。

innodb_flush_log_at_trx_commit=1

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

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

innodb_flush_log_at_trx_commit=2

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

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

日志文件組

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

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

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

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

write pos是當前記錄的位置,一邊寫一邊后移

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

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

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

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

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

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

小結

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

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

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

1 Byte = 8bit

1 KB = 1024 Byte

1 MB = 1024 KB

1 GB = 1024 MB

1 TB = 1024 GB

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

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

如果是寫redo log,一行記錄可能就占幾十Byte,只包含表空間號、數據頁號、磁盤文件偏移量、更新值,再加上是順序寫,所以刷盤速度很快。

所以用redo log形式記錄修改內容,性能會遠遠超過刷數據頁的方式,這也讓數據庫的并發能力更強。

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

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7145

    瀏覽量

    89584
  • 存儲
    +關注

    關注

    13

    文章

    4355

    瀏覽量

    86180
  • MySQL
    +關注

    關注

    1

    文章

    829

    瀏覽量

    26743

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

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用插件將Excel連接到MySQL/MariaDB

    ,可以快速地將數據從 MySQL 或 MariaDB 加載到 Excel,立即從數據庫刷新 Excel 工作簿的數據,編輯這些數據,并將它們保存回 MySQL。之后您能夠像使用的 Excel 工作表一樣
    的頭像 發表于 01-20 12:38 ?120次閱讀
    使用插件將Excel連接到<b class='flag-5'>MySQL</b>/MariaDB

    MySQL數據庫的安裝

    MySQL數據庫的安裝 【一】各種數據庫的端口 MySQL :3306 Redis :6379 MongoDB :27017 Django :8000 flask :5000 【二】MySQL 介紹
    的頭像 發表于 01-14 11:25 ?131次閱讀
    <b class='flag-5'>MySQL</b>數據庫的安裝

    數據庫數據恢復—Mysql數據庫表記錄丟失的數據恢復流程

    Mysql數據庫故障: Mysql數據庫表記錄丟失。 Mysql數據庫故障表現: 1、Mysql數據庫表無任何數據或只有部分數據
    的頭像 發表于 12-16 11:05 ?224次閱讀
    數據庫數據恢復—<b class='flag-5'>Mysql</b>數據庫表記錄丟失的數據恢復流程

    MySQL還能跟上PostgreSQL的步伐嗎

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

    香港云服務器怎么部署MySQL數據庫?

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

    詳解MySQL多實例部署

    詳解MySQL多實例部署
    的頭像 發表于 11-11 11:10 ?325次閱讀

    LOG200評估模塊

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

    MySQL編碼機制原理

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

    適用于MySQL的dbForge架構比較

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

    配置MySQL主從復制和讀寫分離

    配置MySQL主從復制和讀寫分離
    的頭像 發表于 10-23 11:44 ?543次閱讀
    配置<b class='flag-5'>MySQL</b>主從復制和讀寫分離

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

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

    MySQL知識點匯總

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

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

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

    MySQL的整體邏輯架構

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

    MySQL忘記root密碼解決方案

    mysql登錄密碼為password()算法加密,解密成本太高,以下為通用方案; 原理:mysql提供了特殊啟動方式,即跳過權限表驗證,啟動后,登錄不需要提供密碼; 登錄后,即可修改mysql數據庫的user表,重置
    的頭像 發表于 04-23 16:08 ?768次閱讀
    主站蜘蛛池模板: 亚洲视频黄 | 最新sss华人 | 欧美 日韩 中文字幕 | 午夜免费视频网站 | 一区二区精品 | 欧美特级午夜一区二区三区 | 欧美成人天天综合天天在线 | 色老头在线精品视频在线播放 | 日本一区二区三区在线观看视频 | 狠狠色色综合网站 | 亚洲国产网址 | 色视频www在线播放国产人成 | 天堂在线看 | 欧美视频a| 久久久久免费观看 | 俄罗斯一级特黄黄大片 | 特黄视频免费看 | 六月丁香深爱六月综合激情 | 一区二区三区在线播放 | 日韩欧美理论 | www亚洲一区 | 亚洲免费影视 | a级毛片免费观看网站 | 欧美.亚洲.日本一区二区三区 | 久久成人网18网站 | 人人九九精 | 黄色片香蕉视频 | 黄网站在线观看高清免费 | 精品久草| 四虎影院一区二区 | 天堂成人在线 | 婷婷丁香综合网 | 天堂视频在线视频观看2018 | 国内一级特黄女人精品毛片 | 夜夜澡人人爽人人喊_欧美 夜夜综合网 | 欧美激情综合色综合啪啪五月 | 免费看又爽又黄禁片视频1000 | 国产三级日本三级美三级 | 在线免费看| 美女扒开尿口给男人捅 | 色噜噜狠狠网站 |