开发者

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

目录
  • 1、背景
  • 2、redo日志
    • 【1】格式
    • 【2】类型
    • 【3】组
    • 【4】Mini-Transaction
  • 3、总结

    1、背景

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

    2、redo日志

    【1】格式

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

    MySQL之InnoDB中的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_Rhttp://www.devze.comEC_INSERT38插入一条使用紧凑行格式记录的redo日志类型
    MLOG_COMP_PAGE_CREATE58创建一个存储紧凑行格式记录的页面的redo日志类型
    MLOG_COMP_REC_DELETE42删除一条使用紧凑行格式记录的redo日志类型
    MLOG_COMP_phpLIST_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的结果如下:

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

    MLOG_WRITE_STRING类型结构如下:

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

    MLOG_COMP_REC_INSERT类型结构如下:

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

    【3】组

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

    【4】Mini-Transaction

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

    3、总结

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

    以上为个人经验,希望能给大家一个参考,也希望大家多多支js持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新数据库

    数据库排行榜