redolog有什么用,是怎么工作的

redolog其实就是想干一件事:当一个事务commit了,那肯定是在内存中改了,但是在磁盘里未必。可能刚提交事务就宕机了,还没来得及写磁盘(并且也不会立刻写的,会隔一段时间才刷)。redolog就是要保证这个一致性。
那乍一想我每次内存更新磁盘就更新不就解决了,但这么粗暴的解决方式肯定有问题的:

  • 有时候你只修改了一个页的一个字节,但我却要刷写一个页,因为innoDB以页为单位读写
  • 一个事务有很多语句,一个语句有很有可能修改很多页。随机io开销太大了。

Q:那咋整?
A:用redo日志,你提交事务,可以先不随机io修改数据而是先写到磁盘中的一个位置上,这个位置叫redo日志。redolog降低了刷盘频率并且占用的空间非常小。同时它记录了页表空间的id等,刷盘很快。这个就叫WAL(Write-Ahead Logging,日志先行)。并且redolog只记载记录下对磁盘中某某页某某位置数据的修改结果,这样会节省很多磁盘空间。与数据库层的binlog完成一个事务写一次不同,redolog是存储引擎层的,他会在事务执行过程中不断记录。并且尽管redolog是磁盘的一块空间,但写入的过程是顺序的,因为它是一个循环的逻辑空间,如下图所示,需要注意实际上redo日志文件是若干文件组串起来的。在这里插入图片描述
具体工作如下:
在这里插入图片描述
其中最重要的是3!,其实这步保证了,其他的都好说了。那redolog的刷盘策略到底是啥呢?其实redolog buffer和redolog file之间还有一层缓冲,叫做文件系统缓存(page cache),这是操作系统为了提升写入效率的一个优化。那这里有三种选择:

  • 设置为0 :表示每次事务提交时不进行刷盘操作。(系统默认master thread每隔1s进行一次重做日 志的同步) 第1步:先将原始数据从磁盘中读入内存中来,修改数据的内存拷贝 第2步:生成一条重做日志并写入redo log buffer,记录的是数据被修改后的值 第3步:当事务commit时,将redo log buffer中的内容刷新到 redo log file,对 redo log file采用追加 写的方式 第4步:定期将内存中修改的数据刷新到磁盘中
  • 设置为1 :表示每次事务提交时都将进行同步,刷盘操作( 默认值,安全性最好效率差些 )
  • 设置为2 :表示每次事务提交时都只把 redo log buffer 内容写入 page cache,不进行同步。由os自 己决定什么时候同步到磁盘文件。
    在这里插入图片描述

那是如何写入redolog file的呢?也就是说过程是怎样的呢?
首先我们得先知道什么是mtr,也就是Mini-Transaction,即MySQL底层页面中的一次原子访问过程。比如,向某个索引对应的B+树中插入一条记录的过程就是一个Mini-Transaction。一个所谓的mtr可以包含一组redo日志,在进行崩溃恢复时这一组redo日志可以作为一个不可分割的整体。
在这里插入图片描述

一个mtr执行过程中可能产生若干条redo日志,这些redo日志是一个不可分割的组,所以其实并不是每生成一条redo日志,就将其插入到log buffer中,而是每个mtr运行过程中产生的日志先暂时存到一个地方,当该mtr结束的时候,将过程中产生的一组redo日志再全部复制到log buffer中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/232815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于设计师的自我评价(合集)

设计师的自我评价篇一 本人接受过正规的美术教育,具有较好的美术功底及艺术素养,能够根据公司的需要进行设计制作,熟练掌握多种电脑制作软件,能够高效率地完成工作。本人性格开朗、思维活跃、极富创造力,易于沟通&…

软件测试必会:cookie、session和token的区别

今天就来说说session、cookie、token这三者之间的关系!最近这仨玩意搞得头有点大🤣 01 为什么会有它们三个 我们都知道 HTTP 协议是无状态的,所谓的无状态就是客户端每次想要与服务端通信,都必须重新与服务端链接,意…

Selenium Wire - 扩展 Selenium 能够检查浏览器发出的请求和响应

使用 Selenium 进行自动化操作时,会存在很多的特殊场景,比如会修改请求参数、响应参数等。 本篇将介绍一款 Selenium 的扩展,即能够检查浏览器发出的请求和响应 - Selenium Wire。 简介 Selenium Wire 扩展了 Selenium 的 Python 绑定&…

24--泛型与Collections工具类

1、泛型 1.1 泛型概述 在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。 p…

Sectigo DV多域名证书能保护几个域名

多域名SSL证书不限制受保护的域名的类型,可以时多个主域名或者子域名,多域名SSL证书都可以同时保护,比较灵活。但是,多域名https证书并不是免费无限制保护域名数量,一把的多域名SSL证书默认保护3-5个域名记录&#xff…

云原生之深入解析强大的镜像构建工具Earthly

一、Earthly 简介 Earthly 是一个更加高级的 Docker 镜像构建工具,Earthly 通过自己定义的 Earthfile 来代替传统的 Dockerfile 完成镜像构建;Earthfile 就如同 Earthly 官方所描述: Makefile Dockerfile Earthfile在使用 Earthly 进行构建镜像时目前…

使用终端启动若依ruoyi

使用终端启动若依ruoyi 01 找到ruoyi-ui文件夹 02 cmd界面两个指令 npm i 下载完成后出现这个界面即为成功 npm run dev 加载结束后出现端口号即可 03 默认账号密码 访问localhost8080可得以上界面默认账号是admin默认密码是damin123

selenium元素定位与操作

说明:本篇博客基于selenium 4.1.0 在selenium中,想要对元素进行操作,一般需要如下步骤: 在浏览器中查看元素属性,便于selenium在页面中找到该元素在代码中创建元素对象元素操作、获取元素信息 查看元素属性 浏览器…

项目实战:自动驾驶之方向盘操纵

项目介绍 根据汽车前方摄像头捕捉的画面,控制汽车方向盘转动的方向和角度,这是自动驾驶要解决的核心问题。这个项目主要是通过使用深度神经网络解决一个回归问题。不同于分类、识别场景,回归问题中神经网络输出的是一个连续的值。 通过这个项目的学习,可以将神经网络用于通…

【ESP32填坑日记】问题篇⑧ VScode中提示无法使用compilerPath解析配置:“C:/xxx/xtensa-esp32-elf-gcc.exe“

关注星标公众号,不错过精彩内容 作者 | 量子君 微信公众号 | 极客工作室 问题描述 在编译成功,重启之后就编译不成功了,并报如图错误: 无法使用 compilerPath 解析配置:“C:/xxx/xtensa-esp32-elf-gcc.exe” 解决…

【软件工程】软件工程复习题库2023

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 SpringCloud MybatisPlus JVM 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 软件工程复习题库 一、选择题二、填空题三、判断题四…

数据结构 -- 堆

一.堆的概念 1.1 堆是什么 堆也叫做优先队列,一些按照重要性或优先级来组织的对象称为优先队列。 1.2 为什么需要堆 在现实生活中,存在许多需要从一群人、一些任务或一些对象中找出“下一位最重要”目标的情况。例如:在平时处理事情的时候我…

不同版本QT使用qmake时创建QML项目的区别

不同版本QT使用qmake时创建QML项目的区别 文章目录 不同版本QT使用qmake时创建QML项目的区别一、QT5新建QML项目1.1 目录结构1.2 .pro 文件内容1.3 main.cpp1.4 main.qml 二、QT6新建QML项目2.1 目录结构2.2 .pro文件内容2.3 main.cpp2.4 main.qml 三、两个版本使用资源文件的区…

鼠标响应突然不灵敏的检查方法

鼠标突然响应缓慢或者失灵,如下检测步骤: 1、首先排查电源问题,更换电池或者充电; 2、观察光标移动响应、鼠标左键响应、鼠标右键响应、鼠标滚轮等操作,哪些正常,哪些异常。 2、把鼠标接到别的机器上实验…

[Kubernetes]3. k8s集群Service详解

在上一节讲解了k8s 的pod,deployment,以及借助pod,deployment来部署项目,但会存在问题: 每次只能访问一个 pod,没有负载均衡自动转发到不同 pod访问还需要端口转发Pod重创后IP变了,名字也变了针对上面的问题,可以借助Service来解决,下面就来看看Service怎么使用 一.Service详…

✺ch5——纹理贴图

目录 加载纹理图像文件纹理坐标在着色器中使用纹理:采样器变量和纹理单元纹理贴图:示例程序多级渐远纹理贴图各向异性过滤环绕和平铺透视变形材质——更多OpenGL细节补充说明 纹理贴图是在栅格化的模型表面上覆盖图像的技术。 它是为渲染场景添加真实感的…

functools.partial:Python中灵活函数部分应用的工具

更多资料获取 📚 个人网站:ipengtao.com 在Python编程中,functools.partial是一个强大的工具,它提供了一种部分应用函数的方式,能够在创建新函数时固定部分参数,从而在后续调用中减少需要传递的参数数量。…

Python四种配色方案,适合科研的配色

1、Plasma(等高线图颜色)2、Inferno(黑热图颜色)3、Cividis(较好的配色方案,适用于色盲)4、Viridis(绿色主导的配色方案) 下面这四种配色是不需要指定的,Pyth…

element组件库的日期选择器如何限制?

本次项目中涉及到根据日期查找出来的数据进行调整,所以修改的数据必须是查找范围内的数据.需要对调整数据的日期进行限制,效果如下: 首先我们使用了element 组件库的日期选择器,其中灌完介绍, picker-options中函数disabledDate可以设置禁用状态,代码如下: <el-date-pickerv…

关于GPU使用过程中的若干问题

1.CUDA异常 问题描述&#xff1a;运行torch.cuda.is_available() 报错&#xff1a;cuda unknown error - this may be due to an incorrectly set up environment解决方案&#xff1a;重启 2.nvidia驱动版本不匹配 问题描述&#xff1a;运行nvidis-smi 报错&#xff1a;Fa…