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存储引擎为了