(十一)mysql常用命令之InnoDB数据页结构

  • 概要
    前面已经说过了行记录结构。我们知道在mysql的物理存储中,所有的数据都是存储在一个独立或者共享的表空间(也就是一个ibd文件)中的,而在这个文件中有一些逻辑上的划分;表空间->段->区->页->行记录,所以这次我们需要讲的就是在页中是个怎样的结构,然后怎么管理一个行记录集的。

  • 页结构图
    在这里插入图片描述
    文件头,页头,文件结尾信息的大小是固定的分别为38,56,8个字节,这些主要用于记录页的基本信息,比如这个页是什么类型的页,这个页在b+tree这颗树中处在的位置是非叶子节点页还是叶子节点页,我们可以利用这些信息可以来还原这颗b+tree树;剩下的都是用来控制行记录使用的,行记录的变化会影响到空闲空间的多少和页目录,这些值的空间大小是动态的的。

  • File Header
    文件头用来记录页的一些头信息,由八个部分组成,共占用38字节
    a. 1-4字节 FILE_PAGE_SPACE_OR_CHKSUM 表示处在b+tree的层数
    b. 5-8字节 FILE_PAGE_OFFSET 表示表空间中页的偏移量,表示在所有页中的位置,相对表空 间而言,不是相对某种类型的页而言
    c.9-12字节 FIL_PAGE_PREV 表示当前页的上一页
    d.13-16字节 FIL_PAGE_NEXT表示当前页的下一页
    e.17-24字节 FIL_PAGE_LSN 表示该页最后被修改的日志序列位置(log sequence number)
    f. 25-26字节 FIL_PAGE_TYPE 表示该页的类型,其中给我们比较关心的数据页类型的,0x45BF
    g.27-34字节 FILE-PAGE_FILE_FLUSH_LSN 对于独立表空间这个值为0
    h.35-38字节 FIL_PAGE_ARCH_LOG_SPZCE_ID 该页属于哪个表空间

    总结:文件头是描述这个页在表空间中的状态信息,比如在表空间中这个页的偏移量,这个页属于所有页类型中的哪种页之类的信息。

  • Page Header
    页头用来记录数据页中的状态信息,共14部分组成,共占56字节

发布了65 篇原创文章 · 获赞 11 · 访问量 7176

猜你喜欢

转载自blog.csdn.net/weixin_38312719/article/details/89398195