数据库日志——Undo | Redo

数据库崩溃恢复机制:REDO日志与UNDO日志详解 在数据库管理系统中,事务的持久性和一致性是至关重要的。为了保证在系统崩溃或发生故障时数据不会丢失,数据库引入了恢复机制。其中,REDO日志和UNDO日志是两种关键的恢复技术。本文将详细描述这两种日志的作用、工作原理以及它们在数据库崩溃恢复中的应用。 阅读详情

原文链接:http://www.cnblogs.com/Bozh/archive/2013/03/18/2966494.html

00 – Undo Log
Undo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC)。

- 事务的原子性(Atomicity)
  事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在执行的过程中发生
  了错误,要回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过。

- 原理
  Undo Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方
  (这个存储数据备份的地方称为Undo Log)。然后进行数据的修改。如果出现了错误或者用户执行了
  ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。

除了可以保证事务的原子性,Undo Log也可以用来辅助完成事务的持久化。

- 事务的持久性(Durability)
  事务一旦完成,该事务对数据库所做的所有修改都会持久的保存到数据库中。为了保证持久性,数据库
  系统会将修改后的数据完全的记录到持久的存储上。

- 用Undo Log实现原子性和持久化的事务的简化过程
  假设有A、B两个数据,值分别为1,2。
  A.事务开始.
  B.记录A=1到undo log.
  C.修改A=3.
  D.记录B=2到undo log.
  E.修改B=4.
  F.将undo log写到磁盘。
  G.将数据写到磁盘。
  H.事务提交
  这里有一个隐含的前提条件:‘数据都是先读到内存中,然后修改内存中的数据,最后将数据写回磁盘’。

  之所以能同时保证原子性和持久化,是因为以下特点:
  A. 更新数据前记录Undo log。
  B. 为了保证持久性,必须将数据在事务提交前写到磁盘。只要事务成功提交,数据必然已经持久化。
  C. Undo log必须先于数据持久化到磁盘。如果在G,H之间系统崩溃,undo log是完整的,
     可以用来回滚事务。
  D. 如果在A-F之间系统崩溃,因为数据没有持久化到磁盘。所以磁盘上的数据还是保持在事务开始前的状态。

缺陷:每个事务提交前将数据和Undo Log写入磁盘,这样会导致大量的磁盘IO,因此性能很低。

如果能够将数据缓存一段时间,就能减少IO提高性能。但是这样就会丧失事务的持久性。因此引入了另外一
种机制来实现持久化,即Redo Log.

01 – Redo Log

- 原理
  和Undo Log相反,Redo Log记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可,
  不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是Redo Log已经持久化。系统可以根据
  Redo Log的内容,将所有数据恢复到最新的状态。

- Undo + Redo事务的简化过程
  假设有A、B两个数据,值分别为1,2.
  A.事务开始.
  B.记录A=1到undo log.
  C.修改A=3.
  D.记录A=3到redo log.
  E.记录B=2到undo log.
  F.修改B=4.
  G.记录B=4到redo log.
  H.将redo log写入磁盘。
  I.事务提交

- Undo + Redo事务的特点
  A. 为了保证持久性,必须在事务提交前将Redo Log持久化。
  B. 数据不需要在事务提交前写入磁盘,而是缓存在内存中。
  C. Redo Log 保证事务的持久性。
  D. Undo Log 保证事务的原子性。
  E. 有一个隐含的特点,数据必须要晚于redo log写入持久存储。

- IO性能
  Undo + Redo的设计主要考虑的是提升IO性能。虽说通过缓存数据,减少了写数据的IO.
  但是却引入了新的IO,即写Redo Log的IO。如果Redo Log的IO性能不好,就不能起到提高性能的目的。
  为了保证Redo Log能够有比较好的IO性能,InnoDB 的 Redo Log的设计有以下几个特点:

  A. 尽量保持Redo Log存储在一段连续的空间上。因此在系统第一次启动时就会将日志文件的空间完全分配。
     以顺序追加的方式记录Redo Log,通过顺序IO来改善性能。
  B. 批量写入日志。日志并不是直接写入文件,而是先写入redo log buffer.当需要将日志刷新到磁盘时
     (如事务提交),将许多日志一起写入磁盘.
  C. 并发的事务共享Redo Log的存储空间,它们的Redo Log按语句的执行顺序,依次交替的记录在一起,
     以减少日志占用的空间。例如,Redo Log中的记录内容可能是这样的:
     记录1: <trx1, insert …>
     记录2: <trx2, update …>
     记录3: <trx1, delete …>
     记录4: <trx3, update …>
     记录5: <trx2, insert …>
  D. 因为C的原因,当一个事务将Redo Log写入磁盘时,也会将其他未提交的事务的日志写入磁盘。
  E. Redo Log上只进行顺序追加的操作,当一个事务需要回滚时,它的Redo Log记录也不会从
     Redo Log中删除掉。

渗透测试面试题 渗透测试面试题 一.思路流程 1.信息收集 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等) 网站指纹识别(包括,cms,cdn,证书等),dns记录 whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等) 子域名收集,旁站,C段等 google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等 扫描网站目录结构,爆后台,网站banner,测试文件,... 阅读详情

相关推荐

Ubuntu22.04安装ROS1

代表使用 2 线程进行编译,可以根据 CPU 适当调整。如果出现小乌龟窗口,说明安装成功 🎉!启动成功,则打开另一个终端,测试。需要解决一些兼容性问题,因为。由于 Ubuntu 22.04。过程,确保成功安装。

asafriend的博客 4648

MySQL数据库InnoDB存储引擎Log漫游(1)

本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo Log Undo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC)。 - 事务的原子性(Atomicity)   事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在执行的过程中发生   了错误,

liaoyuanzi的专栏 814

网格聚类 Grid Clustering/Grid-based Clustering

本文主要简单介绍了网格聚类的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型参数等。

JasonH2021的博客 4829

MySQL redo和undo日志详解 | 学习笔记

为什么需要redo日志和undo日志呢?我们知道事务有四个特征:原子性,一致性,隔离性,持久性。隔离性由锁机制实现,其他三种特性是由redo日志和undo日志来实现的。 REDO LOG称为重做日志, 1. redo日志 二级标题 2. undo 日志 四级标题 五级标题 六级标题 ...

qq_41523340的博客 4818

XGBoost与Embedding混合建模实战解析

在机器学习领域,特征工程与模型融合是提升预测性能的关键技术。Embedding技术通过将高维稀疏特征(如文本、ID类数据)转化为低维稠密向量,有效捕获语义关联;而XGBoost作为强大的集成学习算法,擅长处理结构化特征并进行自动特征组合。两者结合的混合架构(如Semantic Boosted Trees)在金融风控和推荐系统等场景中展现出显著优势,尤其在处理用户行为序列、商品ID等复杂特征时,相比传统方法能获得更好的模型效果。本文通过电商推荐和金融反欺诈等案例,详解如何实现Embedding+XGBoost

weixin_28718641的博客 327

生物信息学投稿避坑指南:如何根据影响因子和审稿速度选择最适合的期刊

本文为生物信息学研究者提供全面的期刊投稿策略,重点解析影响因子、审稿速度等关键指标,帮助选择最适合的期刊。涵盖算法开发类和应用型研究的投稿路径,分析不同出版社特点及开放获取的利弊,并提供投稿全流程优化建议,助力高效发表研究成果。

weixin_42652674的博客 380

MySQL事务日志--redo, undo详解

事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由锁机制实现。而事务的原子性、一致性和持久性由事务的 redo日志和undo日志来保证。REDO LOG称为重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。UNDO LOG称为回滚日志,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。有的DBA或许会认为UNDO是REDO的逆过程,其实不然。

weixin_47786582的博客 4296

最短线性递推式求解与有理函数重建

这一算法来自于我们对“线性递推式拟合”的视角转换,其后得到的算法是自然的。 引理 1. 如果两个有理分式 p1/q1,p2/q2p_1/q_1, p_2/q_2p1​/q1​,p2​/q2​ 均有 deg⁡p<n,deg⁡q≤n\deg p<n, \deg q\leq ndegp<n,degq≤n 且展开式 p1/q1≡p2/q2(modx2n)p_1/q_1 \equiv p_2/q_2 \pmod {x^{2n}}p1​/q1​≡p2​/q2​(modx2n),那么 p1/q1=p2/

Entropy Increaser 的博客 2592

REDO与UNDO

redo(重做信息)是Oracle在在线(或归档)重做日志文件中记录的信息,万一出现失败时可以利用这些数据来“重放”(或重做)事务。 Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文件。 数据库所在主机掉电,导致实例失败,Oracle会使用在线重做日志将系统恰好恢复到掉电之前的那个时间点。 如果磁盘驱动器出现故障(这是一个介质失败),Orac...

tan88881111的博客 923

华为OD机试 - 开源项目热度榜单(Java 2025 C卷 100分)

H = Wwatch X#watch + Wstar X#star +Wfork X#fork +Wissue X#issue +Wmr X#mr H表示热度值,Wwatch、Wstar、Wfork、Wissue、Wmr分别表示5个统计维度的权重,#watch、#star、#fork、#issue、#mr分别表示5个统计维度的统计值。

学Java,找哪吒 1756

农业生产AI决策系统架构设计解密:数据层-模型层-应用层核心逻辑

想象一下,在一个炎热的夏日,传统农田里的农民伯伯正满头大汗地检查每一株玉米是否缺水;而几公里外的智慧农场里,一位年轻农民正在空调房里滑动手机屏幕,看着AI系统自动生成的灌溉计划——这就是农业生产AI决策系统带来的改变。本文的目的,就是要揭开这个"智能农业大脑"的面纱,详细讲解它的"身体构造"(架构设计)和"工作原理"(核心逻辑)。我们将聚焦系统最核心的三个部分:数据层(收集农田信息)、模型层(分析信息并思考决策)和应用层(将决策告诉农民)。

AI智能探索者的博客 1327

oracle体系结构梳理---redo和undo解析1

undo用来干什么的?undo表空间 1.事物回滚:rollback 2.查询一致性 3.flashback 实例的恢复时用到的回滚...

congwan1707的博客 274

C# 上位机内存泄漏排查指南:3 个工具 + 4 个技巧,从 GC 频繁到稳定运行 720 小时

C# 上位机内存泄漏排查的核心是「先定位泄漏存在,再追溯引用根源,最后修复验证通过「Visual Studio 诊断工具(快速定位)+ dotMemory(深度分析)+ PerfView(生产监控)」三个工具的配合,结合「复现场景、排查静态成员+事件、检查非托管资源、GC 日志验证」四个技巧,可高效解决绝大多数泄漏问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 739

Mysql数据库Redo日志和Undo日志的理解

即使此时数据库系统崩溃了,数据库重启的时候,系统也能从redo日志中将刚刚那次事务的变更刷入到磁盘中。:有时候仅仅更新了数据库中某一行的某一列的一个字段,但是事务提交的时候需要刷新一个完整页(16KB)到磁盘上。:一个事务可能包含很多语句,对应的数据不一定在磁盘相邻的页上,当把数据从buffer pool刷入到磁盘上时,需要进行很多的。比如执行insert之前,会写一条delete的语句到undo日志中,一旦事务回滚,则会执行这条delete语句。,即先写入到顺序IO的redo日志上,再写入到数据磁盘上。

xueping_wu的博客 1220

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

理解数据库中的undo日志、redo日志、检查点

数据库存放数据的文件,本文称其为data file。 数据库的内容在内存里是有缓存的,这里命名为db buffer。某次操作,我们取了数据库某表格中的数据,这个数据会在内存中缓存一些时间。对这个数据的修改在开始时候也只是修改在内存中的内容。当db buffer已满或者遇到其他的情况,这些数据会写入data file。 undo,redo 日志在内存里也是有缓存的,这里将其叫做log buf...

yq272393925的博客 574

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数据库的undo和redo日志

本文介绍undo和redo日志的一般概念,不涉及具体某个数据库的实现细节,参考资料来自《数据库系统实现》的第六章《系统故障对策》。

qq_39984069的博客 853

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

高级数据库系统(Advanced Database System)之:故障恢复(Fault Recovery):日志文件用于系统故障恢复(Undo, Redo, Redo / Undo 型日志)

文章目录数据库内容和介质的关系为什么需要日志DBMS 要维持持久性和原子性缓存区的处理策略Force 策略No steal 策略No Force 策略Steal 策略什么是日志缓存处理策略与日志 / 恢复策略的关系日志的详细描述日志的种类Undo 型日志如何利用 Undo 型日志进行恢复为什么需要检查点检查点(Checkpoint)的种类静止检查点静止检查点进行 Undo 的日志恢复操作非静止检查点非静止检查点进行 Undo 的恢复操作Redo 型日志如何利用 Redo 型日志进行恢复检查点(Checkpo

qq_42902997的博客 1769

Oracle数据库中的REDO日志和UNDO数据有什么区别?

REDO日志侧重于记录数据的变化,以确保即使在系统故障后也能够恢复数据。它是持久性和灾难恢复的基础。UNDO数据侧重于保存数据的旧版本,以支持事务回滚和读取一致性。它是事务完整性和并发控制的重要组成部分。两者共同工作,确保了Oracle数据库的高可靠性、高性能和良好的并发处理能力。理解这两种机制对于有效地管理和维护Oracle数据库至关重要。

qq_33240556的博客 732

数据库日志:Redo Log、Undo Log、Binlog 和 Relay Log

MySQL的数据库日志

@初阶牛的博客 1810

数据库中的undo日志、redo日志

MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要的意...

weixin_34025051的博客 379

数据库undo和redo日志(一)

数据库数据存放的文件称为data file;日志文件称为log file;数据库数据是有缓存的,如果没有缓存,每次都写或者读物理disk,那性能就太低下了。数据库数据的缓存称为data buffer,日志(redo)缓存称为log buffer;既然数据库数据有缓存,就很难保证缓存数据(脏数据)与磁盘数据的一致性。在任何地方,只要考虑到读写缓存,就得考虑一致性的问题了。 当数据库中的查询更新一个字段时,并不是将修改刷入磁盘才返回结果给用户,而是将log刷入磁盘就给用户结果了,后面由系统将修改按page的粒.

超级码力 1218

MySQL数据库日志文件(redo与undo)

+++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据库日志文件时间:2019年2月25日内容:MySQL数据库日志文件(redo日志和undo日志文件)重点:MySQL数据库日志文件(redo日志和undo日志文件)+++++++++++++++++++++++++++++++++++++++++++1. redo日志文件1.1 re...

weixin_30425949的博客 451

数据库日志(binlog、redo log、undo log)

又称归档日志,由binlog是一种记录对表数据进行增删改操作以及表结构改变的二进制文件。update、delete、insert、create table等等语句都会被记录,binlog记录的是sql语句,属于逻辑日志。并且binlog是追击写入的,即写满一个文件后,会再创建一个文件接着写入,文件名称是mysql-bin.xxxxxx,如mysql-bin.000001,序号递增。

2301_82014959的博客 853

mysql redo文件_MySQL数据库日志文件(redo与undo)

+++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据库日志文件时间:2019年2月25日内容:MySQL数据库日志文件(redo日志和undo日志文件)重点:MySQL数据库日志文件(redo日志和undo日志文件)+++++++++++++++++++++++++++++++++++++++++++1. redo日志文件1.1 redo日志写...

weixin_33219863的博客 484

【数据库日志】undo log、redo log和bin log作用及原理

执行一条查询SQL发生了如下流程:那么,

loss_rose777的博客 1344
上一篇: 在项目中部署maven
下一篇: storm学习1
hellochenlu
博客等级 码龄14年 97粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值