域名

一分钟理解Redo Undo

时间:2010-12-5 17:23:32  作者:系统运维   来源:数据库  查看:  评论:0
内容摘要:数据库中有一种特殊的“日志文件”叫 Redo(重做) Undo(撤销),传统意义上的日志文件是记录系统运行状态的,主要用于系统工程师或者程序员排错。而 Reod/Undo 文件是数据库的一部分,主要用

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

用途

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

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

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

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

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

如何恢复

两个原则

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

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

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

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

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

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

戳这里,香港云服务器看该作者更多好文

copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap