常见类型

在InnoDB存储引擎中,常见的页类型包括以下几种

  1. 数据页(Data Page):存储表中的数据记录。
  2. 索引页(Index Page):存储表的索引信息。
  3. undo页(Undo Page):存储事务回滚信息。
  4. redo页(Redo Page):存储事务提交信息。
  5. 描述页(FSP Page):存储表空间的元数据信息。
  6. 描述页(Inode Page):存储InnoDB文件系统的元数据信息。
  7. BLOB页(BLOB Page):存储BLOB和TEXT类型的数据。
  8. 描述页(SYS_PAGE):存储系统表空间的元数据信息。
  9. 描述页(IBUF_BITMAP_PAGE):存储insert buffer的位图信息。

Page页结构

MySQL page页的结构_表空间

MySQL page页的结构Page页各部分说明

名称

占用大小

说明

File Header

38字节

文件头, 描述页信息

Page Header

56字节

页头,页的状态

Infimum + Supremum

26字节

最大和最小记录,这是两个虚拟的行记录

User Records

不确定

用户记录,存储数据行记录

Free Space

不确定

空闲空间,页中还没有被使用的空间

Page Directory

不确定

页目录,存储用户记录的相对位置

File Trailer

8字节

文件尾,校验页是否完整

File Header

用于记录 Page 的头信息,其中通过 FIL_PAGE_PREVFIL_PAGE_NEXT 字段与其它页形成一条双向链表

Page Header

用于记录 Page 的状态信息

Infimum + Supremum

伪行记录 Infimum:下确界 记录该页中比任何主键值都要小的值 Supremum:上确界 记录该页中比任何主键值都要大的值 伪记录分别构成了页中记录的边界

User Records

存放实际的数据行记录,每一个 User Record 通常包含以下信息:

  • Record Header:记录头部,包含了一些重要的记录级别元数据信息,例如记录大小、记录类型、记录格式等。
  • Record Data:记录数据,即实际存储在表中的数据内容。

当有数据插入的时候,会从 页空闲空间 进行分配用于存储新的记录

Free Space

在InnoDB存储引擎中,Free Space是一种用于管理表空间中未使用空间的数据结构,它的作用是记录表空间中所有未使用的空间块的位置和大小信息。

Free Space通常由多个连续的页组成,每个页被称为Free Space Page(FSP)。每个FSP中包含多个Free Space Entry(FSE),每个FSE记录了一个未使用的空间块的位置和大小信息。

具体来说,每个FSE包含以下信息:

  1. Start Offset:空间块在表空间文件中的起始位置偏移量。
  2. Length:空间块的大小。
  3. Flags:空间块的状态信息,例如是否已分配、是否是最后一个空间块等。

通过Free Space,InnoDB存储引擎可以快速地查找和管理表空间中的未使用空间。例如,当需要分配新的数据页时,InnoDB可以通过Free Space查找到一个足够大的未使用空间块,并将其标记为已分配状态;当需要删除某个数据页时,InnoDB可以将该页所占用的空间块标记为未使用状态,并将其添加到Free Space中,以便后续重复利用。

需要注意的是,Free Space只用于管理表空间中未使用的空间块,而不管理其他类型的页(例如数据页、undo页、redo页等)。此外,在不同版本的InnoDB存储引擎中,Free Space可能会有不同的实现方式和优化策略,例如在MySQL 8.0中,InnoDB存储引擎引入了一种称为"UNIV_PAGE_SIZE"的新特性来改进Free Space的管理方式。

Page Directory

在InnoDB存储引擎中,Page Directory是一种用于管理页的数据结构,它的作用是记录表空间中所有数据页的位置和状态信息。

Page Directory通常由多个连续的页组成,每个页被称为Page Directory Page(PDP)。每个PDP中包含多个Page Directory Entry(PDE),每个PDE记录了一个数据页的位置和状态信息。

具体来说,每个PDE包含以下信息:

  1. Page Number:数据页的编号。
  2. File Segment/Page Offset:数据页在表空间文件中的位置偏移量。
  3. Page Type:数据页的类型,例如数据页、索引页等。
  4. Page State:数据页的状态,例如已分配、未分配等。

通过Page Directory,InnoDB存储引擎可以快速地查找和管理表空间中的数据页。例如,当需要分配新的数据页时,InnoDB可以通过Page Directory查找到一个未分配的页,并将其标记为已分配状态;当需要读取某个数据页时,InnoDB可以通过Page Directory查找到该页在表空间文件中的位置,并从文件中读取该页的内容。

需要注意的是,Page Directory只用于管理数据页,而不管理其他类型的页(例如undo页、redo页等)。此外,不同版本的InnoDB存储引擎可能会有不同的Page Directory实现方式,例如在MySQL 8.0中,InnoDB存储引擎使用了一种称为"UNIV_PAGE_SIZE"的新特性来改进Page Directory的实现方式。

MySQL page页的结构_元数据_02

File Trailer

File Trailer是表空间文件的结尾部分,包含了一些重要的文件级别元数据信息,例如文件大小、页数、校验和等。