一分钟理解Redo Undo

系统运维2025-11-05 05:46:2137

数据库中有一种特殊的分钟“日志文件”叫 Redo(重做) Undo(撤销),传统意义上的理解日志文件是记录系统运行状态的,主要用于系统工程师或者程序员排错。分钟而 Reod/Undo 文件是理解数据库的一部分,主要用于数据恢复,分钟保证数据的理解一致性和完整性。

用途

当执行 Insert、分钟Update、理解Delete 动作时数据库不会真的分钟去数据文件中执行 I/O 操作,而是理解分了两部分:

修改内存中的数据(数据库称为 Buffer) 记录 Redo Undo 日志

只有当 Buffer 达到刷新条件(比如脏数据达到一定比例)才会对数据文件进行操作。数据库这么设计是分钟出于性能考虑,因为读写数据文件是IT技术网理解一次随机 I/O 会降低系统性能;虽然 Redo Undo 也会写文件,但它是分钟顺序写入,性能比较高。理解

这种顺序写入一般采用 LSM (Log Structured Merge Trees)算法,分钟比如 Kafka,HBase、LevelDB 都采用这种结构。

因为数据并没有真正的写入数据文件,所以当数据库系统崩溃后(比如断电、系统重启、介质错误),数据库系统会利用Redo、Undo 恢复数据。

如何恢复

两个原则

从前向后读取 Redo,重做所有已提交的事务 从后往前读取 Undo,回滚未提交的事务

以上面操作为例,假设故障点发生在***个 Write 之后。

数据库启动后读取 Redo 文件没有发现已经提交的服务器托管事务,什么也不做;读取 Undo 文件发现未提交的事务,恢复 X=0(假设 X 历史值为 0)。

假设故障点发生在第二个 Write 之后:数据库启动后读取 Redo 文件发现没有已经提交的事务,什么也不做;读取 Undo 文件发现未提交的事务,恢复 X=1,继续回滚X=0。 假设故障点发生在 Commit 之后:数据库启动后读取 Redo 文件发生已经提交的事务,执行 X=1,然后 X=2;读取 Undo 文件发现提交事务,什么也不做。

多个事务也是如此,读者可以自行尝试枚举。

【本文是专栏作者“邢森”的原创文章,转载请联系作者本人获取授权】

戳这里,源码库看该作者更多好文

本文地址:http://www.bhae.cn/news/190b4799762.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

华为电脑音响使用教程——打造完美音频体验(掌握华为电脑音响的使用技巧,享受高品质音频效果)

VR & AR 凉而复热了

泛型,很多人因它放弃学习TypeScript?

如何把awk脚本移植到Python

飞利浦MP3SA0283音质如何?(揭秘飞利浦MP3SA0283的音质表现及特点)

快速掌握前端开发中的常见错误

12月份Github上热门的JavaScript开源项目

五种方法教你Python字符串连接

友情链接

滇ICP备2023000592号-9