说过的话就一定要办到 - redo日志

news2025/1/19 20:20:49

一、什么是redo日志?

如果我们只在内存的 Buffer Pool 中修改了页面,假设在事务提交后突然发生了某个故障,导致内存中的数据都失效了,那么这个已经提交了的事务对数据库中所做的更改也就跟着丢失了,这会导致事务会失去持久性。所以我们需要把修改了哪些东西记录一下。即使之后系统崩溃了,重启之后只要按照上述内容所记录的步骤重新更新一下数据页,那么该事务对数据库中所做的修改又可以被恢复出来,记录内容就是 redo日志。所以redo日志的本质是记录了一下事务对数据库做了哪些修改
redo日志有两个好处:
(1) redo 日志占用的空间非常小
(2) redo 日志是顺序写入磁盘

二、 redo日志格式

在这里插入图片描述

  1. 简单的redo日志
  2. 复杂一些的redo日志类型
  3. redo日志格式小结redo日志会把事务在执行过程中对数据库所做的所有修改都记录下来,在之后系统奔溃重启后可以把事务所做的任何修改都恢复出来。

三、Mini-Transaction

引出:在执行语句的过程中产生的 redo 日志被设计 InnoDB 的大叔人为的划分成了若干个不可分割的组。举例:有的需要保证原子性的操作会生成多条 redo 日志,比如向某个索引对应的 B+ 树中进行一次悲观插入(插入数据时候发生页分裂)就需要生成许多条 redo 日志。设计 MySQL 的大叔把对底层页面中的一次原子访问的过程称之为一个 Mini-Transaction ,简称 mtr。在这里插入图片描述

四、redo日志的写入过程

  1. 写入过程在服务器启动时就向操作系统申请了一大片称之为 redo log buffer 的连续内存空间,翻译成中文就是 redo日志缓冲区 ,我们也可以简称为 log buffer 。这片内存空间被划分成若干个连续的 redo log block ,就像这样:
    在这里插入图片描述
    其中的每个redo log block 中的 log block body部分都是写入redo日志的地方,从左往右依次填满各个redo log block。 注意:并不是每生成一条 redo 日志,就将其插入到 log buffer 中,而是每个 mtr 运行过程中产生的日志先暂时存到一个地方,当该 mtr 结束的时候,将过程中产生的一组 redo 日志再全部复制到 log buffer 中。
  2. buf_free变量在这里插入图片描述
  3. lsn变量
    概念设计 InnoDB 的大叔为记录已经写入的 redo 日志量,设计了一个称之为 Log Sequeue Number 的全局变量,简称 lsn
    在这里插入图片描述从上边的描述中可以看出来,每一组由mtr生成的redo日志都有一个唯一的LSN值与其对应,LSN值越小,说明
    redo日志产生的越早。
  4. buf_next_to_write变量(可略)
    概念指下一个要被写入磁盘的缓存页的位置。
    在这里插入图片描述
  5. flushed_to_disk_lsn变量一开始与lsn值相同,然后主键开始拉开差距,若某时刻相同,则所有redo日志都刷新到磁盘
    概念:指已经将数据写入磁盘的最后一个LSN。指已经将数据写入磁盘的最后一个LSN
    注意如果两者的值相同时flushed_to_disk_lsn与lsn),说明log buffer中的所有redo日志都已经刷新到磁盘中了
  6. flush链表中的lsn
    flush链表中的脏页按照修改发生的时间顺序进行排序,也就是按照oldest_modification代表的LSN值进行排序,被多次更新的页面不会重复插入到flush链表中,但是会更新newest_modification属性的值
  7. lsn值和redo日志文件偏移量的对应关系
    在这里插入图片描述
    上面是lsn,下面是磁盘中日志文件偏移量

五、redo日志文件

  1. redo日志刷盘时机
    (1)log buffer 空间不足时
    (2)事务提交时
    (3)后台线程不停的刷刷刷
    (4)正常关闭服务器时‘
    (5)5. checkpoint 时
  2. redo日志文件组(磁盘中)
    概念:MySQL 的数据目录(使用 SHOW VARIABLES LIKE ‘datadir’ 查看)下默认有两个名为 ib_logfile0 和
    ib_logfile1 的文件, log buffer 中的日志默认情况下就是刷新到这两个磁盘文件中可调节)。注意:写的时候会有追尾现象在这里插入图片描述
    具体结构:(前2048个字节,存储一些管理信息的。从第2048字节往后是用来存储 log buffer 中的block镜像
    在这里插入图片描述
  3. checkpoint
    引出redo日志只是为了系统奔溃后恢复脏页用的,如果对应的脏页已经刷新到了磁盘,也就是说即使现在系统奔溃,那么在重启后也用不着使用redo日志恢复该页面了,所以该redo日志也就没有存在的必要了,那么它占用的磁盘空间就可以被后续的redo日志所重用也就是可以光明正大的追尾)。所以,判断某些redo日志占用的磁盘空间是否可以覆盖的依据就是它对应的脏页是否已经刷新到磁盘里。
    checkpoint_lsn变量来代表当前系统中可以被覆盖的 redo 日志总量是多少。
    checkpoint:当一个redo日志组所对应的页已经刷新到磁盘中了,那么该日志组产生的redo日志就可以被覆盖了,然后做一次checkpoint_lsn值增加的操作。这个过程称为做一次checkpoint。步骤以下:
    步骤二:计算一下当前系统中可以被覆盖的 redo 日志对应的 lsn 值最大是多少。凡是在所有mtr的lsn值小于该节点的oldest_modification值时产生的redo日志都是可以被覆盖掉的。
    步骤一:将 checkpoint_lsn 和对应的 redo 日志文件组偏移量以及此次 checkpint 的编号写到日志文件的管理信息

易于理解:只有日志文件组那部分是在磁盘上。

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

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

相关文章

火力全开,重新定义蓝牙耳机!新一代南卡OE Pro不入耳式蓝牙耳机震撼来袭

中国专业声学品牌Nank南卡,在近期推出了南卡OE Pro不入耳蓝牙耳机,是业内首款功能配置齐全的蓝牙耳机,以创新开放式听音方式,让更多人感受到不入耳开放式耳机带来的魅力之处。据了解,有不少媒体猜测,南卡OE…

工作面试老大难 - 锁

一、概述 为保证数据的一致性和完整性,需要对 事务间并发操作进行控制 ,因此产生了 锁 。锁冲突 也是影响数据库 并发访问性能 的一个重要因素。所以锁对数据库而言显得尤其重要,也更加复杂。 二、并发问题 MySQL并发事务访问相同记录 &am…

硬件设计--DAPLINK设计

1 参考网站 1、打造属于你自己的STM32下载器调试器--------DAPLink 2、ARMmebed官方开源代码DAPLink 3、ARMmebed官方开源代码DAPLink github加速网站 4、ARMmebed官方开源硬件旧版 5、ARMmebed官方开源硬件新版 6、自制DAPLink – ARM官方源码以及STM32F103C8T6 7、如何做一个…

软件测试之测试名词解释

1. 白盒测试,英文是white-box testing 是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。 2. 黑盒测试,英…

word脚标【格式:第X页(共X页)】

不得不吐槽一下这个论文,真的我好头疼啊。我又菜又不想改。但是还是得爬起来改 (是谁大半夜不能睡觉加班加点改格式啊) 如何插入页码。 格式、要求如下: 操作步骤: ①双击页脚,填好格式,宋体小四和居中都…

除了 Swagger,这个开源 API 管理工具生成文档更高效

提起 Swagger,经常接触接口开发的朋友,一定知道并且都熟练使用了。 Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web 服务。通俗的来讲,Swagger 就是将项目中所有(想要暴露的)接口展现在页面上,并且…

VMware ESXi 8.0U1 发布 - 领先的裸机 Hypervisor

请访问原文链接:https://sysin.org/blog/vmware-esxi-8-u1/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023-04-18, VMware vSphere 8.0U1 发布。 详见:VMware vSphere 8 Update 1 新增功能 产品简…

ai智能写作助手-ai自动写作软件

为什么要用ai智能写作工具 在数字化时代,AI(人工智能)技术已经被广泛应用于各种领域,其中之一是写作。AI智能写作工具是利用自然语言处理技术和机器学习算法来生成高质量的文章、博客、新闻稿等。这些工具不仅提供了便捷、高效的…

校园网策列及思路

解决思路一: 适合以下情况也是我现在的学校校园网大概情况: 内网不认证情况下可以互联,除了几个常见端口封闭(目前已知3389),要联网必须认证登录,而且一个号最多两台设备(甚至有时候…

FANUC机器人DCS功能基本介绍

FANUC机器人DCS功能基本介绍 1. 定义 DCS(Dual Check Safety)位置/速度检查功能;利用机器人控制柜中两个独立CPU进行电机速度和位置数据的检查,实时检查位置和速度误差,并通过两个独立的通道关闭电机电源。 DCS功能可以有效地节约占地面积。 DCS功能可以防止机器人工具…

工业通讯应用中主流的常用协议Modbus协议

智联物联技术分享,本期为大家介绍工业通讯常用的主流协议Modbus协议。 Modbus协议的前身叫做Mod协议,常被用于Modicon公司的PLC控制器中,后来Modicon被Schneider收购后随之改名为我们如今所熟悉的modbus协议,现如今广泛应用在物联…

【高级数据结构】红黑树

本文整理红黑树学习过程中的知识点和底层代码实现。 目录 基本概念1、介绍2、应用3、性质 实现红黑树1、原理2、操作1)查找2)插入3)删除 和其他相似结构的对比1、二叉搜索树(BST)2、AVL树1)例子2&#xff0…

Dubbo+Zookeeper 实现服务远程调用

文章目录 一、Dubbo 架构图二、Zookeeper 注册中心三、SpringBoot 整合 Dubbo3.1 添加依赖3.2 配置服务端3.3 配置消费端3.4 启动测试 四、Dubbo-admin 管理中心4.1 部署服务端4.2 部署前端4.3 访问控制台 提示:以下是本篇文章正文内容,Java 系列学习将会…

Visual Assist X安装失败解决办法

最近重装了VS2017,在重装之前卸载了VA助手,但是等到装好VS再去装VA助手时,总是提示以下错误信息: Visual Assist Installer : An error was reported by Visual Studio VSIXInstaller. See the next window for access to its err…

ElasticJob

官网 :: ElasticJob ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案&…

如何给厂区做导航地图?智能工厂导航地图解决方案公司

如何给厂区做导航地图?在智慧园区中,基于园区的电子地图地图使用的重要性越来越凸显。但目前在园区信息化应用形式中,广泛缺乏专业电子地图的使用,主要原因是:一是地图系统(GIS)实现繁复,与其他展会业务系统…

GateWay微服务网关的搭建

服务网关 没有服务网关 问题:地址太多|安全性|管理问题 访问商品服务 http://ip地址:9001/goods/findAll 访问广告服务 http://ip地址:9002/brand/findAll 访问用户服务 http://ip地址:9003/user/findAll 在有网关的情况下,我们配置网关端口号为…

Vue2之webpack篇(二)Loader

目录 一、loader处理css 1、css文件的创建 2、安装css-loader 3、配置 4、打包 5、最终效果 二、loader处理图片 1、引入图片 2、安装file-loader 3、配置module 4、webpack打包 三、ES6转ES5 1、介绍 2、安装babel-loader 3、webpack.config.js配置 4、webpack打…

C++数据结构:二叉树

二叉树 每个结点最多只有二棵子树,也就是二叉树中没有度大于2的结点。二叉树的子树有左右之分,严格区分左孩子、右孩子,其次序不能颠倒 二叉树五种基本形态 特殊二叉树 斜树 所有节点都只有左子树的二叉树叫做左斜树,所有节点都…

SAP ABAP 创建后台定时任务job

定时任务的事务码 sm36:创建定时任务 sm37:查看定时任务 JDBG:后台任务debug,在对应的sm37中对应的job页面 t-code输入 创建定时任务SM36 1、名称可以随便起一般都是按自己公司业务情况来,比如我这个就是哪一个报表的定时任务,做的是什么操作&#xf…