【面试题】Redo log和Undo log
Redo log
介绍Redo log之前我们需要了解一下,mysql数据操作的流程:

上述就是数据操作的流程图,可以发现sql语句并不是直接操作的磁盘而是通过操作内存,然后进行内存到磁盘的一个同步。这里我们必须要了解一些区域:
- 缓冲池(buffer pool):主内存中的一个区域,里面可以缓存磁盘经常操作偶的真实数据,在执行增删查改的时候,先操作缓冲池中的数据(如果缓冲池中没有数据,则从磁盘中加载并且缓存),以一定的频率刷新到磁盘当中,从而减少磁盘io,加快处理速度
- 数据页(page):是InnoDB存储引擎磁盘管理的最单元,每页默认的大小是16kb。页中存储的是表中一行又行数据
当执行sql语句的时候,首先会操作内存中的缓冲池(首先会判断是否有操作的数据,如果没有从磁盘中加载),因为直接操作内存的性能会比操作磁盘的性能更加高,然后将操作缓冲池中的数据,同步到磁盘中,这样的目的就是可以减少磁盘的io,加快处理的速度,这样就完成了事务的持久化
但是我们需要想到一个问题,如果我们在将脏页(缓冲池的数据)的数据同步到磁盘中的时候,数据库宕机了,这个时候就会发生数据的丢失,就不能满足事务的持久化了,所以我们就需要Redo log日志来解决这样的问题
Redo Log:重做日志,纪律的是事务提交的时候的数据页的物理修改,是用来实现事务的持久性
操作的流程图如下:

redo log日志主要是分为两个部分:重做日志缓冲以及重做日志文件,前者是在内存中的,后者是在磁盘中的。当事务提交之后会把所有修改信息都存储在日志文件中,用于刷新脏页到磁盘发生错误的时候,进行数据的恢复使用
具体流程就是,当发生增删改的时候,首先会修改buffer pool中的数据,而redo log buffer会记录里面的数据页的变化,一旦日志出现了变化,就会同步到磁盘中的重做日志文件,当发现buffer pool同步数据失败的时候,可以通过日志来同步数据
但是就会有一个疑问:这样是否会拖慢操作的速度呢,不用redo log可以么,当数据页发生变化的时候直接进行内存到磁盘的同步不可以么
是可以的,但是会出现性能的问题,当大量的增删改的sql发过来的时候,内存到磁盘的同步是随机的磁盘的io,这样的性能是很低的。而redo log是顺序的磁盘io,日志文件是追加的,这样性能会提升;这种机制就叫做WAL
- 顺序 I/O(Sequential I/O):是指读写操作的访问地址连续。在顺序 I/O 访问中,存储设备(如 HDD 硬盘)所需的磁道搜索时间显著减少,因为读/写磁头可以以最小的移动访问下一个块。数据备份和日志记录等业务通常是顺序 I/O 业务。
- 随机 I/O(Random I/O):则是指读写操作时间连续,但访问地址不连续,随机分布在磁盘的地址空间中。产生随机 I/O 的业务有 OLTP 服务、SQL 操作、即时消息服务等
Undo log
Undo log是一个回滚日志,作用主要是包含两个:提交回滚和MVCC(多版本并发控制)。undo log和redo log记录物理日志不一样,他记录的是逻辑日志,undo log可以实现事务的一致性和原子性
- 可以认为当delete一条数据的时候,undo log会记录一条对应的insert记录,反之亦然
- 当update一条记录的时候,它记录一条对应相反的update记录。当执行rollback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚
Redo log和undo log区别
- lredo log: 记录的是数据页的物理变化,服务宕机可用来同步数据
- lundo log :记录的是逻辑日志,当事务回滚时,通过逆操作恢复原来的数据
- lredo log保证了事务的持久性,undo log保证了事务的原子性和一致性
相关文章:
【面试题】Redo log和Undo log
Redo log 介绍Redo log之前我们需要了解一下,mysql数据操作的流程: 上述就是数据操作的流程图,可以发现sql语句并不是直接操作的磁盘而是通过操作内存,然后进行内存到磁盘的一个同步。这里我们必须要了解一些区域: 缓…...
开发实战经验分享:互联网医院系统源码与在线问诊APP搭建
作为一名软件开发者,笔者有幸参与了多个互联网医院系统的开发项目,并在此过程中积累了丰富的实战经验。本文将结合我的开发经验,分享互联网医院系统源码的设计与在线问诊APP的搭建过程。 一、需求分析 在开发任何系统之前,首先要…...
springboot系列教程(十六):配置Actuator组件,实现系统监控
一、Actuator简介 1、监控组件作用 在生产环境中,需要实时或定期监控服务的可用性。Spring Boot的actuator(健康监控)功能提供了很多监控所需的接口,可以对应用系统进行配置查看、相关功能统计等。 2、监控分类 Actuator 提供…...
单臂路由组网实验,单臂路由的定义、适用情况、作用
一、定义 单臂路由是指通过在路由器的一个接口上配置许多子接口,从而实现原来相互隔离的不同VLAN之间的互通。 子接口:把路由器上的实际的物理接口划分为多个逻辑上的接口,这些被划分的逻辑接口就是子接口。 二、适用情况 用在没有三层交换机,却要实现不同VLAN之间的互…...
【数据结构初阶】顺序表三道经典算法题(详解+图例)
Hello!很高兴又见到你了~~~ 看看今天要学点什么来充实大脑吧—— 目录 1、移除元素 【思路图解】 【总结】 2、删除有序数组中的重复项 【思路图解】 【总结】 3、合并两个有序数组 【思路图解】 【总结】 至此结束,Show Time! 1、…...
SpringBoot接入JPA连接数据库H2或MySQL例子
一,JPA相关的常用注解和对象 Entity,用于实体类声明语句之前,指出该Java类为实体类,将映射到指定的数据库表;Table,当实体类与其映射的数据库表名不同名时需要使用。该标注与Entity标注并列使用&…...
持续集成05--Gogs的安装与使用
前言 在持续集成/持续部署(CI/CD)的旅程中,版本控制系统是不可或缺的一环。当我们在使用jenkins,想要达到测试脚本有更新,就让项目自动去进行构建,或者当开发脚本有更新,也可以自动去构建的效果…...
C++--fill
把[first,last)之间的元素填充为val。 template<class ForwardIterator, class Type> void fill( ForwardIterator first, //起始迭代器 ForwardIterator last, //结束迭代器 const Type& val //设置的值 );源码剖析 template<class ForwardIterator, c…...
Java:对比一个对象更新前后具体被修改了哪些值
Java:对比一个对象更新前后具体被修改了哪些值 Zyyyyu 的个人博客 遇到一个需求就是要记录每行数据被修改更新后,要记录下当前值和修改前的值 那有人就会说写个if去判断值是否被修改了,然后记录下来不就行了,这是一个思路&#x…...
GO——GMP 好文整理
GMP相关好文推荐: Golang 调度器设计思想、GMP 协程调度模型详解 Golang的协程调度器原理及GMP设计思想 Golang调度器GMP原理与调度全分析...
园区AR导航系统构建详解:从三维地图构建到AR融合导航的实现
随着现代园区规模的不断扩大与功能的日益复杂,传统的二维地图导航已难以满足访客高效、精准定位的需求。园区内部错综复杂的布局、频繁变更的商户位置常常让访客感到迷茫,造成寻路上的时间浪费。园区AR导航系统以创新的技术手段,破解了私域地…...
接口测试总结(非标准)
为什么要做接口测试? 答:接口测试是为了检测系统组件间接口的正确性和稳定性,以及检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系等。接口测试可以帮助我们发现系统中的潜在问题,确保系统的稳定性…...
在Ubuntu 18.04上安装和使用Composer的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 Composer 是一个流行的 PHP 依赖管理工具,主要用于简化项目依赖项的安装和更新。它会检查特定项目依赖的其他软件包&a…...
ssm 学习 ---(spring)
一、spring框架 1、基本框架 2、Beanfactory快速入门 配置清单:xml文件 (1) 导入jar包或者maven坐标 (2) 定义UserService接口以及UserService实现类 (3) 创建bean.xml配置文件,将UserService信息配置到该xml文件中; (4)编写测试代码,创…...
Jupyter Notebook安装及基本使用
Jupyter Notebook安装及基本使用 目录 Jupyter Notebook安装及基本使用方式一:Anaconda直接安装方式二:pip命令安装Jupyter使用虚拟环境 方式一:Anaconda直接安装 安装Anaconda 下载地址,输入邮箱,Windows下载 开始安…...
Jenkins+Maven+Gitlab+Tomcat自动化构建打包+部署
目录 环境准备 导入项目包 配置jenkins 构建项目 配置项目上线 修改项目代码测试 环境准备 本实操项目环境基于https://blog.csdn.net/Lzcsfg/article/details/140359830 首先在node01主机中操作,本次操作需要java8的版本,将之前安装的java17卸…...
Synchronized升级到重量级锁会发生什么?
我们从网上看到很多,升级到重量锁的时候不会降级,再来线程都是重量级锁 今天我们来实验一把真的是这样的吗 1.首选导入Java对象内存布局的工具库: <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-…...
【Webpack】HMR 热更新
HMR全称Hot Module Replacement,可以理解为模块热替换,指在应用程序运行过程中,替换、添加、删除模块,而无需重新刷新整个应用。 不使用热更新,我们在应用运行过程中修改了某个模块,通过自动刷新会导致整个…...
【计算机视觉】siamfc论文复现
什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置),来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 孪生网络结构其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中࿰…...
PotatoTool 蓝队版 V1.3 发布:增强功能和性能优化
一、简介 经过广大网友的反馈和建议,我们对V1.1版本中存在的问题进行了优化。其中,我们针对MD5库进行了本地化处理,以提高查询效率。然而,这也导致了软件体积的飙升。二、优化概述 1、兼容性 兼容arm架构系统 2、UI 2.1 界面…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
