当前位置: 首页 > news >正文

Java面试八股之MySQL的redo log和undo log

  1. MySQL的redo log和undo log

在MySQL的InnoDB存储引擎中,redo log和undo log是两种重要的日志,它们各自服务于不同的目的,对数据库的事务处理和恢复机制至关重要。

Redo Log(重做日志)

功能

redo log的主要作用是确保事务的持久性(Durability),即使在系统崩溃的情况下也能恢复数据的一致性。

它记录了所有修改数据页的物理变化,这些变化在事务提交后会被记录到redo log中。

工作原理

当一个事务中的数据页发生变化时,InnoDB不仅会修改内存中的数据,还会在redo log中记录这个修改动作。

当事务提交时,相关联的redo log会被标记为已提交,这样即使在之后的系统崩溃中,通过重放redo log,InnoDB能够确保所有已提交的事务所做的更改都能被应用到磁盘上的数据页中。

重要性

redo log是恢复策略的一部分,它确保了即使在断电或系统崩溃后,数据库仍能恢复到一个一致的状态。

由于redo log的存在,InnoDB能够在重启后重做所有已提交的事务,从而保证数据的完整性和持久性。

Undo Log(撤销日志)

功能

undo log主要用于支持事务的回滚(Rollback)和实现多版本并发控制(MVCC)。

它记录了事务修改前的数据值,使得事务在回滚时能够恢复到修改前的状态。

工作原理

当一个事务开始时,任何对数据页的修改都会生成一条undo log记录,这条记录保存了修改前的数据值。

如果事务回滚,InnoDB会使用undo log中的信息将数据恢复到事务开始时的状态。

对于MVCC,undo log使得多个事务可以同时读取同一行的不同版本,而不会相互干扰。

重要性

undo log保证了事务的原子性和一致性,使数据库能够在事务失败或回滚时回到一个一致的状态。

它也是MVCC的关键组成部分,允许并发读取而不阻塞事务的写操作。

总结来说,redo log和undo log分别负责持久性和一致性两个方面,它们共同作用于InnoDB的事务处理和恢复机制,确保了数据库的ACID属性。redo log关注数据的持久性,而undo log则关注数据的可回滚性和多版本并发控制。

如果大家需要视频版本的讲解,欢迎关注我的B站:

相关文章:

  • Drools开源业务规则引擎(五)- jBPM流程图元素介绍
  • 7.8作业
  • 仪表板展示|DataEase看中国:2023年中国新能源汽车经济运行情况分析
  • vue3+ts 重复参数提取成方法多处调用以及字段无值时不传字段给后端
  • 2011年的数字IC设计面经
  • MySQL:left join 后用 on 还是 where?
  • 解决Linux中已安装JDK但是java找不到命令问题
  • matlab实现pid控制空调温度
  • 昇思25天学习打卡营第19天 | ResNet50迁移学习再续
  • 【JVM-04】线上CPU100%
  • wordpress外贸建站公司案例英文模板
  • Netty服务端接收TCP链接数据
  • 代码随想录算法训练营:28/60
  • JAVA中关于compareTo方法的原理深挖
  • 【论文阅读】AsyncDiff: Parallelizing Diffusion Models by Asynchronous Denoising
  • 时间复杂度分析经典问题——最大子序列和
  • 【附node操作实例】redis简明入门系列—字符串类型
  • CSS魔法堂:Absolute Positioning就这个样
  • C语言笔记(第一章:C语言编程)
  • ES6--对象的扩展
  • 成为一名优秀的Developer的书单
  • 从tcpdump抓包看TCP/IP协议
  • 前端设计模式
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 网页视频流m3u8/ts视频下载
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #define与typedef区别
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $ git push -u origin master 推送到远程库出错
  • (AngularJS)Angular 控制器之间通信初探
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (ZT)出版业改革:该死的死,该生的生
  • (办公)springboot配置aop处理请求.
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (回溯) LeetCode 46. 全排列
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (学习日记)2024.02.29:UCOSIII第二节
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .Net插件开发开源框架
  • .NET应用架构设计:原则、模式与实践 目录预览
  • [@Controller]4 详解@ModelAttribute
  • []error LNK2001: unresolved external symbol _m
  • [240903] Qwen2-VL: 更清晰地看世界 | Elasticsearch 再次拥抱开源!
  • [BUUCTF]-Reverse:reverse3解析
  • [C#]OpenCvSharp 实现Bitmap和Mat的格式相互转换
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [C#基础]说说lock到底锁谁?