论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
分布式数据库
›
图解MySQL【日记】——Redo Log
图解MySQL【日记】——Redo Log
滴水恩情
论坛元老
|
2025-2-22 06:54:44
|
显示全部楼层
|
阅读模式
楼主
主题
1700
|
帖子
1700
|
积分
5100
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
Redo Log(重做日记)
为什么必要 Redo Log?
1. 瓦解恢复
数据库瓦解时,系统通过 Redo Log 来恢复尚未写入磁盘的数据。Redo Log 记录了所有已提交变乱的利用,系统在重启后会重做这些利用,以包管数据不会丢失。
2. 进步性能
使用 Redo Log 可以制止每次修改都立即写入磁盘(随机写),而是先将修改利用写入 Redo Log(顺序写),然后将数据写入内存,末了再异步地将数据写入磁盘,镌汰了磁盘 I/O 的次数,进步了性能。
3. 变乱同等性
纵然数据库在实行过程中瓦解,Redo Log 也可以帮助恢复所有已提交的变乱,确保数据库恢复到同等(Consistency)的状态。
Redo Log 是什么?
Redo Log 是物理日记,记录了某个数据页做了什么修改,如对 AAA 表空间中的 BBB 数据页 CCC 偏移量的地方做了 DDD 更新,每当实行一个变乱,就会产生一条或多条物理日记。
在变乱提交时,只要包管 Redo Log 被持久化到磁盘即可,可以不必要比及将缓存在 Buffer Pool 里的脏页数据持久化到磁盘。纵然系统瓦解,Redo Log 已完成持久化,等待 MySQL 重启后,可以根据 Redo Log 的内容,将所有数据恢复到最新状态。
WAL(Write-Ahead Logging)技术
核心思想
先写日记
:修改数据之前,先将修改利用记录到日记文件中,之后择机再写到磁盘中。
瓦解恢复
:这样纵然瓦解,数据也能通过日记恢复到同等的状态。
顺序写 VS 随机写
:Redo Log 采用顺序循环写的方式,写入磁盘的速率远大于直接写入磁盘的顺序写方式。
过程如图
Redo Log 的持久化过程
1. Redo Log Buffer
在变乱实行过程中,产生的 Redo Log 也不是直接刷盘的,而是先写入 Redo Log Buffer,后续再择机刷入磁盘中。
默认巨细为 16MB,可通过 innodb_log_Buffer_size 参数动态调解巨细,增大时,可以让 MySQL 处置处罚【长变乱】时不必写入磁盘,提拔写 I/O 性能。
2. Redo Log 什么时间刷盘?
缓存在 Redo Log Buffer 中的 Redo Log 还是在内存中,刷盘时机如下:
MySQL 正常关闭时。
Redo Log Buffer 中记录的写入量大于总内存空间(由 innodb_log_Buffer_size 控制)的一半时,触发落盘。
超过一半就落盘的原因
:在
性能
和
数据安全
之间找到一个平衡点。
InnoDB 的后台线程每隔 1s,将 Redo Log Buffer 持久化到磁盘。
每次提交变乱时,将 Redo Log Buffer 持久化到磁盘,由 innodb_flush_log_at_trx_commit 参数控制。
3. innodb_flush_log_at_trx_commit 参数
决定 Redo Log 的刷盘时机。
0 :每次变乱提交,将 Redo Log 留在 Redo Log Buffer 中,该模式下,变乱提交时不会主动触发落盘利用。
写入磁盘时机
:等待 InnoDB 后台线程每隔 1s,先写入 OS 的 Page Cache,后调用 fsync() 持久化到磁盘。
数据安全性
:MySQL 瓦解时,会导致
上 1s 所有变乱数据丢失
。
1(默认):每次变乱提交,将缓存在 Redo Log Buffer 中的 Redo Log 直接持久化到磁盘中。
安全性
:该模式可以包管 MySQL 异常重启后,数据不会丢失。
2:每次变乱提交时,都只将缓存在 Redo Log Buffer 中的 Redo Log 写到 Redo Log 文件(OS 的 Page Cache,系统文件缓存),而非磁盘。
写入磁盘时机
:等待 InnoDB 后台线程每隔 1s,调用 fsync() 将 Page Cache 中的 Redo Log 持久化到磁盘。
数据安全性
:MySQL 瓦解时不会导致数据丢失,只有在
OS 瓦解或系统断电的情况下,丢失上 1s 所有事物数据
。
数据安全性对比:参数 1 > 参数 2 > 参数 0
写入性能对比:参数 1 < 参数 2 < 参数 0
每种参数对应的写入过程
4. Redo Log 怎样写入?
重做日记文件组(Redo Log Group):
默认情况下,InnoDB 存储引擎有一个 Redo Log Group,该重做日记文件组由 2 个 Redo Log 文件构成,且每个 Redo Log File 的巨细固定且同等,如下图
循环写:
Redo Log Group 是以循环写方式工作的,即重新开始写,写到末尾再循环到开头,相称于环形。
具体过程
:Redo Log 是制止防止 Buffer Pool 中的脏页丢失而设计的,但随着系统运行,Buffer Pool 中的脏页逐步被刷新到磁盘中,Redo Log 也必要更新本身的空间,擦除已刷新到磁盘中的旧记录,为新的脏页数据腾出空间。
write pos:Redo Log 当前记录写到的位置。
check point:表示当前要擦除的位置。
write pos~check point(赤色部分):用来记录新的更新利用。
write pos 追上 check point 时表示 Redo Log 文件已满,这时 MySQL 不能实行新的更新利用,即被壅闭(故大并发量的系统,将 Redo Log 文件巨细设置为适当的值很有必要),此时会停下来将 Buffer Pool 中的脏页数据刷新到磁盘中,然后标记 Redo Log 哪些记录可以被擦除,接着对旧 Redo Log 记录举行擦除,等擦除完成并腾出空间后,check point就会以后移动,MySQL 恢复正常,继续实行新的更新利用。
check point~write pos(蓝色部分):待落盘的脏数据页记录。
一次 check point 的过程就是脏页数据刷新到磁盘中酿成干净页,然后标记 Redo Log 记录中哪些记录可以被覆盖的过程。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
滴水恩情
论坛元老
这个人很懒什么都没写!
楼主热帖
体系集成商重返黄金年代
SFSafariViewController 加载的网页与 ...
ubuntu 20.04 安装好搜狗输入法无法输 ...
Linux 进程概念 (上)
nsenter命令简单介绍
聊聊 C# 和 C++ 中的 泛型模板 底层玩 ...
GIS数据获取:景象数据免费下载网站 ...
未来数据库需要关心的硬核创新 ...
Spark快速上手(2)Spark核心编程-RDD简 ...
一次服务器被入侵的处理过程分享 ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
程序人生
.Net
网络安全
快速回复
返回顶部
返回列表