当前位置: 代码网 > it编程>数据库>Mysql > MySQL之InnoDB中的redo日志类型详解

MySQL之InnoDB中的redo日志类型详解

2025年06月26日 Mysql 我要评论
1、背景执行我们的sql语句是在buffer pool中操作的,因为刷新到磁盘慢的原因可能不会立即同步到磁盘,当系统崩溃时,肯定不能让我们的操作丢失,但是buffer pool中的脏页还未同步到磁盘,

1、背景

执行我们的sql语句是在buffer pool中操作的,因为刷新到磁盘慢的原因可能不会立即同步到磁盘,当系统崩溃时,肯定不能让我们的操作丢失,但是buffer pool中的脏页还未同步到磁盘,所以就要把操作buffer pool的这一过程更轻量的记录下来并写的磁盘,记录下来的内容就叫redo日志

2、redo日志

【1】格式

redo日志的类型有很多种,每条日志的前面部分都是相同的,其通用结构如下如图所示:

在这里插入图片描述

字段含义如下:

字段含义
typeredo日志类型
space id表空间id
page number页号
dataredo日志的具体内容

【2】类型

redo日志类型常见的有如下几种:

字段十进制数含义
mlog_1byte1在页面的某个偏移量处写入1个字节的redo日志类型
mlog_2byte2在页面的某个偏移量处写入2个字节的redo日志类型
mlog_4byte4在页面的某个偏移量处写入4个字节的redo日志类型
mlog_8byte8在页面的某个偏移量处写入8个字节的redo日志类型
mlog_write_string30在页面的某个偏移量处写入一串数据的redo日志类型
mlog_rec_insert9插入一条使用非紧凑行格式记录的redo日志类型
mlog_comp_rec_insert38插入一条使用紧凑行格式记录的redo日志类型
mlog_comp_page_create58创建一个存储紧凑行格式记录的页面的redo日志类型
mlog_comp_rec_delete42删除一条使用紧凑行格式记录的redo日志类型
mlog_comp_list_start_delete44删除一系列使用紧凑行格式记录的开头redo日志类型
mlog_comp_list_end_delete43删除一系列紧凑行格式记录的结尾redo日志类型
mlog_zip_page_compress51压缩一个数据页的redo日志类型
mlog_multi_rec_end31代表一组redo日志中的最后一条redo日志类型

接下来就大概讲一下几种redo日志类型结构, mlog_1byte、 mlog_2byte、 mlog_4byte、 mlog_8byte的结果如下:

在这里插入图片描述

mlog_write_string类型结构如下:

在这里插入图片描述

mlog_comp_rec_insert类型结构如下:

在这里插入图片描述

【3】组

像事务一样,有的场景一组redo日志也具有原子性的特性,所以就有mlog_multi_rec_end类型的redo日志来表示一组redo日志的最后一条,为了区分redo日志到底是单一的还是属于某个组的,就将redo日志结构中的type字段8字节分为前面1字节和后面7字节,前面1字节为1就代表单一的redo日志,否则就为某个组的redo日志,后面7个字节用来表示redo日志类型。

【4】mini-transaction

访问一组redo日志的过程叫做mini-transaction,一个事务可以包含多个语句,一个语句可以包含多个mini-transaction,一个mini-transaction包含多个redo日志,这就是它们之间的关系。

3、总结

本文主要简单介绍了一下redo日志有哪几种类型,还有一些其它的类型可以在网上大概查找了解一下。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com