Redo Log
redo log进行刷盘的效率要远高于数据页刷盘,具体表现如下
redo log体积小,只记录了哪一页修改的内容,因此体积小,刷盘快
redo log是一直往末尾进行追加,属于顺序IO。效率显然比随机IO来的快
Redo log 格式
在MySQL的InnoDB存储引擎中,redo log(重做日志)被用于记录数据库的所有修改操作,以便在系统崩溃时可以利用重做日志来恢复数据。重做日志是InnoDB存储引擎的一种WAL(Write Ahead Logging,预写式日志)技术,先写日志,再写入磁盘。
redo log 本质上记录的就是对某个表空间的某个数据页的某个偏移量的地方修改了几个字节的值,它需要记录的其实就是 表空间号+数据页号+偏移量+修改的长度+具体的值,所以 redo log 占用的空间非常小,一条 redo log 也就几个字节到几十个字节的样子。
针对不同的修改场景,InnoDB定义了多种类型的 redo log,不同类型的 redo log 基本上就是下面这样的一个结构。

此外,整个redo log是基于环形结构的,也就是当redo log写到日志文件末尾时,会回到日志文件的开始继续写入(前提是从上次的checkpoint开始到日志文件末尾的部分已经被刷新到磁盘中)。
需要注意的是,InnoDB存储引
本文详细介绍了MySQL InnoDB存储引擎的Redo Log,包括其格式、Redo Log Buffer的工作原理以及刷盘时机。Redo Log用于记录数据库修改,确保在系统崩溃时能恢复数据。内容涵盖Redo Log的环形结构、内存中的Redo Log Buffer及其在事务提交、空间回收和恢复时间缩短等方面的作用,以及不同刷盘策略的讨论。
订阅专栏 解锁全文
178

被折叠的 条评论
为什么被折叠?



