【面试题】Redo log和Undo log

news2024/11/13 7:55:06

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保证了事务的原子性和一致性

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

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

相关文章

推荐一款使用Java EE技术栈的企业应用定制化开发平台(带源码)

前言 在数字化转型的浪潮中,企业面临着多样化的信息系统建设需求。现有的软件系统往往存在定制化程度低、开发周期长、成-本高等问题。此外,随着企业规模的扩大和业务的复杂化,传统的软件系统难以满足灵活多变的业务需求。 为了解决这些痛点…

【前端7*】表格-表单2(弹窗在子组件)父子组件调用 vue element-ui

vue element-ui 中表单弹框的使用 写在最前面一、子组件 HelloWorld.vue1. 弹窗部分、将 visible 传值给父组件2.表单的 ruleForm 校验方法3.表单确认方法4. 提交确认方法:handleSummit5.表单渲染 二、父组件 HomeView.vue1.新增按钮、查看和编辑2.引用子组件弹窗3.…

【Linux网络】select{理解认识select/select与多线程多进程/认识select函数/使用select开发并发echo服务器}

文章目录 0.理解/认识回顾回调函数select/pollread与直接使用 read 的效率差异 1.认识selectselect/多线程(Multi-threading)/多进程(Multi-processing)select函数socket就绪条件select的特点总结 2.select下echo服务器封装套接字…

花开半夏,我决意仿一款答题小程序

不是清凉罢挥扇,自缘手倦歇些时。 ——杨万里(宋) 走过春的绚烂,路过初夏的清凉,我们迎来了炎炎夏日。蛙声阵阵,蝉鸣声声,稻花如白练,荷花别样红。 花开半夏,我决意仿一款…

C# 各版本语法新功能汇总

C# 8.0 以后 官网 C# 7.3 》》in C# 7.2 》》 命名参数、具名参数 》》》 条件 ref 表达式 C# 7.1 》》 default 运算符 default 在C#7.1中得到了改进,不再需要default(T)了 //变量赋值C#7.0 var s "字符串"; s default(s…

【常见开源库的二次开发】基于openssl的加密与解密——MD5算法源码解析(六)

一、MD5算法分析 : 1.1 关于MD5 “消息摘要”是指MD5(Message Digest Algorithm 5)算法。MD5是一种广泛使用的密码散列函数,它可以生成一个128位(16字节)的散列值。 RFC 1321: MD5由Ronald Rivest在1992…

某大型企业产品研发管理体系构建指南解决方案

获取完整PPT见下图 更多有关华为研发管理/IPD、MBSE、PLM、ERP、MES、数据治理、数字样机等方面免费解决方案、资料获取,请见下图

MySQL学习记录 —— 이십사 MySQL连接层和服务层

文章目录 1、整体架构2、连接层1、网络端口和连接管理线程2、客户端连接线程管理3、连接量管理 3、服务层1、服务管理和公共组件2、NoSQL接口与SQL接口以及Parser语法分析器3、优化器和缓存 4、SQL语句执行流程 1、整体架构 MySQL8.0服务器是由连接池、服务管理工具和公共组件…

BIOMOD2 物种分布模拟教程

原文链接:BIOMOD2 物种分布模拟教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247609373&idx5&sn492e7597314a5f9e358c35e4780b275f&chksmfa826dfacdf5e4ecf8ac06bdeba5469b31650bdbefbc8fb88b79c0f332714c453a4cc058d29f&token155…

Linux系统部署MySQL数据库

1.Linux插入光盘,使用df-h获取光盘信息,默认/dev/sr0文件为光盘文件 使用命令 mount -o ro /dev/sr0 /media进行手动挂载 mount -o ro /dev/sr0 /media 2.进入cd /etc/yum.repos.d目录 编辑配置yum库,编辑vim yum.repos [BaseOS] nameba…

【postgresql】pg_dump备份数据库

pg_dump 介绍 pg_dump 是一个用于备份 PostgreSQL 数据库的实用工具。它可以将数据库的内容导出为一个 SQL 脚本文件或其他格式的文件,以便在需要时进行恢复或迁移。 基本用法 pg_dump [选项] [数据库名] 命令选项 -h 或 --host:指定数据库服务器的主…

Python Linux环境(Centos8)安装minicoda3+jupyterlab

文章目录 安装miniconda安装python环境启动 最近服务器检查,我下面的服务器有漏洞,不得已重装了,正好记录下怎么从零到python写代码。 安装miniconda miniconda是anconda的精简版,就是管理python环境的得力助手。 # 创建一个名…

企业管理必备:学会寻找客户绝佳方法。

无论是日常沟通、工作交流,还是社交娱乐,微信都扮演着重要的角色。而在微信的使用过程中,添加好友是一项基本而重要的操作,但是您真的会添加微信好友吗? 试试这个神器——微信管理系统,下面分享它快速加客…

TDC 5.0:多集群统一纳管,构建一体化大数据云平台

近期,星环科技数据云平台Transwarp Data Cloud(简称TDC)5.0版本正式发布,TDC5.0架构屏蔽底层多个TDH集群的差异,采用统一操作模式,新增一个多集群抽象与管理层,能够实现多集群网络互通、跨集群资…

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)

文章目录 DDL数据定义语言1、创建数据库2、创建表3、修改表结构4、删除5、数据类型 列的约束主键约束(primary key)唯一约束(unique key)非空约束检查约束(check)外键约束(foreign key&#xff…

顶顶通呼叫中心中间件-被叫路由、目的地绑定(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-被叫路由、目的地绑定(mod_cti基于FreeSWITCH) 1、配置分机 点击分机 -> 找到你需要设置的分机 ->呼叫路由设置为external,这里需要设置的分机是呼叫的并不是坐席的分机呼叫路由 2、配置拨号方案 点击拨号方案 -> 输入目的地绑定 …

C#实战 | 求解《丘建算经》百鸡问题

谈起古代数学,总会想起古希腊欧几里得的名著《几何原本》。而实际上,中国的《周髀算经》《九章算术》《缉古算经》等同样经典,尤其是《九章算术》,更以其算法实用性闻名世界。 中国古代数学的一些发展成果可谓惊艳,足…

不入耳耳机哪个牌子好用?五款卓越精品,小白必看!

怎么选到一款自己满意的开放式耳机?对于刚接触开放式耳机的朋友们来说,耳机的音质、续航、佩戴舒适度都是需要考虑到的,但是普通人往往很难去全面的了解分析耳机的这些性能配置。不入耳耳机哪个牌子好用?为了帮助大家解决这个难题…

Redis三种常用的缓存读写策略

Cache Aside Pattern(旁路缓存模式) 现在基本都用这个模式 Cache Aside Pattern 中服务端需要同时维系 db 和 cache,并且是以 db 的结果为准。 读写步骤: 写: 先更新 db,然后直接删除 cache 。 读 : …

PGCCC|【PostgreSQL】PG考证对工作上有什么好处# PG证书

认证 PostgreSQL 考证(PostgreSQL Certification)在工作上有以下几个好处: 增强专业能力:通过考证,可以系统地学习和掌握 PostgreSQL 数据库的知识和技能,提高自己的专业水平。 提升职业竞争力&#xff1…