Redo log详解

news2024/11/24 19:14:12
  • WAL(Write-Ahead Logging)机制

    WAL 的全称是 Write-Ahead Logging,中文称预写式日志(日志先行),是一种数据安全写入机制。就是先写日志,然后再写入磁盘,这样既能提高性能又可以保证数据的安全性。Mysql中的redo log就是采用WAL机制

    为什么使用WAL?

    磁盘的写操作是随机IO,比较耗性能,所以如果把每一次的更新操作都先写入log中,那么就成了顺序写操作,实际更新操作由后台线程再根据log异步写入。这样对于client端,延迟就降低了。并且,由于顺序写入大概率是在一个磁盘块内,这样产生的io次数也大大降低。所以WAL的核心在于 将随机写转变为了顺序写,降低了客户端的延迟,提升了吞吐量

  • redo log 基本概念

    InnoDB引擎对数据的更新,是先将更新记录写入redo log日志,然后会在系统空闲的时候或者是按照设定的更新策略再将日志中的内容更新到磁盘之中。这就是所谓的预写式技术(Write Ahead logging)。这种技术可以大大减少IO操作的频率,提升数据刷新的效率

    redo log:被称作重做日志, 包括两部分:一个是内存中的日志缓冲(redo log buffer) ,另一个是磁盘上的日志文件(redo log file)

    mysql 每执行一条 DML 语句,先将记录写入 redo log buffer ( redo日志记录的是事务对数据库做了哪些修改 ) 。后续某个时间点再一次性将多个操作记录写到 redo log file。当故障发生致使内存数据丢失后,InnoDB会在重启时,经过重放 redo,将Page恢复到崩溃之前的状态 通过Redo log可以实现事务的持久性

  • redo log数据落盘流程

    将内存中的数据页持久化到磁盘,需要下面的两个流程来完成:

    1. 脏页落盘机制
      在这里插入图片描述
      脏页是指修改了Buffer Pool中的数据页后,导致了内存中的数据页和磁盘中的数据页不一致,这时就出现了脏页

      当进行数据页的修改操作时: 首先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上。页从缓冲池刷新回磁盘的操作并不是在每次页发生更新时触发,而是通过一种称CheckPoint 的机制刷新回磁盘

      checkpoint机制

      思考一下这个场景:如果重做日志可以无限地增大,同时缓冲池也足够大,那么是不需要将缓冲池中页的新版本刷新回磁盘。因为当发生宕机时,完全可以通过重做日志来恢复整个数据库系统中的数据到宕机发生的时刻

      checkpoint(检查点)技术主要解决以下几个问题

      • 缩短数据库的恢复时间
      • 缓冲池不够用时,将脏页刷新到磁盘
      • 重做日志不可用时,刷新脏页

      脏页落盘的时机 采用CheckPoint检查点机制 以下机制都可通过参数控制在这里插入图片描述

    2. redo log 持久化

      缓冲区数据一般情况下是无法直接写入磁盘的,中间必须经过操作系统缓冲区( OS Buffer )。因此,redo log buffer 写入 redo log file 实际上是先写入 OS Cache,然后再通过系统调用 fsync() 将其刷到redo log file

      Redo Buffer 持久化到 redo log 的策略, 可通过 Innodb_flush_log_at_trx_commit 设置:
      在这里插入图片描述
      一般建议选择取值2,因为 MySQL 挂了数据没有损失,整个服务器挂了才会损失1秒的事务提交数据

  • redo log日志格式

    物理日志VS逻辑日志

    • 物理日志: 记录的是每一个page页中具体存储的值是多少,在这个数据页上做了什么修改. 比 如: 某个事物将系统表空间中的第100个页面中偏移量为1000处的那个字节的值1改为2

    • 逻辑日志: 记录的是每一个page页面中具体数据是怎么变动的,它会记录一个变动的过程或SQL语句的逻辑, 比如: 把一个page页中的一个数据从1改为2,再从2改为3,逻辑日志就会记录1->2,2->3这个数据变化的过程

      redo日志属于物理日志, 只是记录一下事务对数据库做了哪些修改

      在这里插入图片描述

  • redo log 写入机制

    redo log buffer是用来缓存写入到redo log文件中的数据内容的,那么是不是每次redo log buffer产生内容就立即写入到磁盘进行持久化呢 ?
    其实不需要的,就算在事务执行期间MySQL宕机了,redo log 缓冲区中的内容丢失了,也不会有损失,因为事务并没有提交(事务提交,必然写入日志完成)

    redo log 三种状态
    在这里插入图片描述

    • 存在于redo log buffer 内存区域中
    • 向磁盘写入,但是没有真正写入磁盘,而是保存在文件系统缓存中
    • 持久化到磁盘

    如果事务没有提交的时候,redo log buffer中的部分日志有可能被持久化到磁盘吗 ?
    触发真正的fsync写盘的场景

    • redo log buffer 占用的空间即将达到 innodb_log_buffer_size 一半的时候,后台线程会主动写盘
    • 并行的事务提交的时候,顺带将某个未提交的事务的redo log buffer 持久化到磁盘。因为redo log buffer 是共享的,因此一些正在执行中的事务的redo log信息也有可能被持久化到磁盘中

    组提交
    MySQL 为了优化磁盘持久化的开销,会有一个组提交(group commit)的机制每个InnDB存储引擎至少有1个重做日志文件组(group),每个文件组下至少有两个重做日志文件,默认的为 ib_logfile0 、 ib_logfile1
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    InnoDB 以环型方式(circular fashion)写入数据到重做日志文件,当文件满了的时候,会自动切换到日志文件2,当重做日志文件2也写满时,会再切换到重做日志文件1
    在这里插入图片描述
    write pos: 表示日志当前记录的位置,当ib_logfile_4写满后,会从ib_logfile_1从头开始记录

    check point: 表示将日志记录的修改写进磁盘,完成数据落盘,数据落盘后checkpoint会将日志上的相关记录擦除掉,即 write pos -> checkpoint 之间的部分是redo log空着的部分,用于记录新的记录, checkpoint -> write pos 之间是redo log 待落盘的数据修改记录

    如果 write pos 追上 checkpoint,表示写满,这时候不能再执行新的更新,得停下来先擦掉一些记录,把 checkpoint 推进一下

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

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

相关文章

华为MPLS跨域C2方式RR场景(数据不经过RR)实验配置

目录 配置BGP邻居的建立 配置MPLS LDP 配置RR之间的MP-BGP邻居 配置通过ASBR学习PE路由并为PE分配标签(实现Vpnv4路由传递和数据传输) 根据图配置接口的IP地址和IGP协议 配置BGP邻居的建立 PE1和RR1建立MP-IBGP邻居(RR1传给PE1的Vpnv4路…

进程/线程 状态模型详解

前言:最近操作系统复习到线程的状态模型(也可以说进程的状态模型,本文直接用线程来说)时候,网上查阅资料,发现很多文章都说的很不一样,有五状态模型、六状态模型、七状态模型.......虽然都是对的…

【1024杯】web

文章目录 1024_fastapi信息收集SSTI 1024_柏拉图信息收集phar反序列化 1024_WEB签到1024_图片代理信息收集gopherus|fastcgi 1024_hello_world信息收集ssti盲注 1024_fastapi 信息收集 FastAPI 是一个高性能 Web 框架,用于构建 API。 主要特性: 快速&am…

【头歌】完整汇编语言程序设计

摘自头歌实训​​​​​​ 目录 相关知识 1.1 RISC-V 汇编语言程序基本结构 1.2 RISC-V 汇编语言程序主要元素 1.2.1 汇编指令 1.2.2 标签 1.2.3 汇编指示语句 1.3 RISC-V 汇编语言程序示例 相关知识 RISC-V 操作数类型、基本调用约定等已在前序关卡中介绍,…

云渲染是您3D项目的最佳选择吗?

市面上很多优秀的大型动画电影,一般都是由实力较大的视觉特效团队制作的,而且大部分使用的是基于云的渲染服务来进行最终渲染。像《哪吒之魔童降世》这样 IMAX 3D 首部国产动画电影、并且刷新了中国动画电影票房纪录的作品,就是现代3D动画提供…

ChatGPT做PPT方案,10组提示词方案!

今天我们要搞定的PPT内容是: 活动类型:节日活动、会员活动、新品活动分析类型:用户分析、新品立项、项目汇报内容类型:内容规划、品牌策划 用到的工具: mindshow 邀请码 6509097ChatGPT传送门(免费使用…

《Linux0.11源码解读》理解(二) 加载setup、加载system

现在CPU开始执行bootsect,它的作用是把第二部分、第三部分程序陆续加载到内存中。把放到合理的内存位置需要先对内存进行规划。 根据上一节,boostsect当前所在内存位置是0x07c0,大小为512byte,现在要将其挪动到内存的0x9000&…

无代码时代来了,程序员会失业吗?不,程序员又不够用了!

有人问我无代码时代来了,程序员会失业吗?太难了,秃了头就算了,连工作也保不住了? 先说观点:并不会 因为,无代码不是真正意义上的无代码。 无代码开发的使用对象是编程小白(我猿是…

Redis的命令以及数据类型

1.Redis的通用命令 KEYS:查看符合模板的所有key,不建议在生产环境设备上使用 DEL:删除一个指定的key EXISTS:判断key是否存在 TTL:查看一个KEY的剩余有效期 2.String类型 String类型,也就是字符串类型…

【Halcon】 Halcon 22.11 安装详细教程

文章目录 1安装2 获取许可证 license2.1 license下载2.2 激活 license放置在相应文件夹下 3 DLT 安装 1安装 1.解压安装包 2.打开运行 exe 程序 跳转至页面 点击“可获得的”,并安装 选择: AVAILABLE ->INSTALL 可获得的 ->安装 5. 等待安装 6…

jQuery -- 常用API(下)

4. jQuery属性操作 4.1 设置或获取元素固有属性值prop() 所谓元素固有属性就是元素本身自带的属性,比如 元素里面的 href ,比如 元素里面的 type。 获取属性语法:prop(属性)设置属性语法:prop(属性, 属性值) 4.2 设置或获取元…

掌握黑客技术:从Kali渗透测试开始

前言 Kali Linux是一种流行的渗透测试和网络安全工具,广泛用于测试和评估网络系统和应用程序的安全性。下面是一个简单的Kali Linux使用教程(Kali使用教程中需要学习的知识点),旨在帮助初学者了解如何使用Kali Linux进行渗透测试…

【计算机网络】网络分层结构

应用层 软件 传输层 TCP UDP协议 网络层 实现源主机到目标主机的传输 IP协议 可能会丢失,可能失序、可能错误 工作设备:路由器、防火墙 链路层 相邻两点的数据传输以帧为单位的数据。 工作设备:交换机 物理层 光信号 电信号 网络边…

15.JVM8为什么要增加元空间

JVM从永久代至元空间内存结构变化图 变化后的java8图 变化之前java7以及之前各代的图 看出变化了吗?堆和方法区连在了一起,但这并不能说堆和方法区是一起的,它们在逻辑上依旧是分开的。但在物理上来说,它们又是连续的一块内存。…

面了一个4年经验的测试工程师,自动化都不会也要15k,我也是醉了····

在深圳这家金融公司也待了几年,被别人面试过也面试过别人,大大小小的事情也见识不少,今天又是团面的一天, 一百多个人都聚集在一起,因为公司最近在谈项目出来面试就2个人,无奈又被叫到面试房间。 整个过程…

mxf文件格式详解

MXF是英文Material eXchange Format(素材交换格式)的缩语。MXF是SMPTE(美国电影与电视工程师学会)组织定义的一种专业音视频媒体文件格式。MXF主要应用于影视行业媒体制作、编辑、发行和存储等环节。SMPTE381M(把MPEG格…

如何在 Linux 中使用 GPG 加密和解密文件?

什么是 GPG? GPG(GNU Privacy Guard)是一种免费的开源加密软件,用于保护计算机数据的机密性和完整性。 它使用非对称加密算法,也称为公钥加密算法,其中数据被加密和解密时使用不同的密钥。每个用户都有一个…

【C++】类与对象(2)

【C】类与对象(2) 作者:爱写代码的刚子 时间:2023.5.4 本篇博客有关构造函数、析构函数、拷贝构造的知识,由于本篇博客可能比较详细,还剩一些内容没介绍,所以我将剩余的知识放在下一篇博客。 目…

探究Spring中Bean的线程安全性问题

前言 今天同事笑嘻嘻的凑过来,问了我一个问题:spring中的bean是线程安全的吗?。我内心一想肯定是安全的,毕竟这样多项目在用。但是转念一想,他那贱兮兮的表情,多半是在给我挖坑。于是我自信的回答他&#x…

如何在 DigitalOcean 中部署 ONLYOFFICE 文档

现在您可使用通过 DigitalOcean 市场提供的一键式应用在 DigitalOcean 云架构中轻松部署 Docker 版本的 ONLYOFFICE 文档。 一键式应用是一个包含所有必要预配置组件的镜像,可用于便捷地在运行有 Ubuntu OS 的 DigitalOcean 服务器上部署 ONLYOFFICE: D…