一、 数据文件
1.1 表空间文件结构
InnoDB表空间文件结构主要包括:Tablespace(表空间)、Segment(段)、Extent(区)、Page(页)、Row(行)。
Tablespace(表空间)
- 表空间是InnoDB存储引擎逻辑结构的最高层,用于存储多个ibd数据文件,用于存储表的记录和索引。一个文件包含多个段。
- 表空间分为:系统表空间、独占表空间、通用表空间、临时表空间、Undo表空间。
Segment(段)
- 段是磁盘上空间分配和回收的申请者,是一个逻辑概念,用来管理物理文件,段是为了保持叶子节点在磁盘上的连续,可以实现更好的顺序I/O操作。
- 常见的段有数据段、索引段、回滚段等。其中索引段就是非叶子结点部分,而数据段就是叶子结点部分,回滚段用于数据的回滚和多版本控制。
Extent(区)
- 区是由连续页组成的空间,每个区的默认大小都是1MB,一个区中有64个连续的页。为了保证区中页的连续性,扩展的时候InnoDB存储引擎一次从磁盘申请4~5个区。
Page(页)
- 页是区的基本组成单元,用于存储数据。默认每一个页的存储大小为16k。包含了多种类型的页,如数据页、undo页、系统页、事务数据页、大的BLOB对象页等。
Row(行)
- InnoDB的数据是按行进行存放的,每个页存放的行记录最多允许存放16KB / 2 -200行的记录,即7992行记录。每行记录根据不同的行格式、不同的数据类型,会有不同的存储方式。
- 行包含了记录的字段值、事务ID、回滚指针、字段指针等信息。
1.2 Page 结构
InnoDB存储引擎的Page是整个存储系统的最小单位,用于存储数据库相关的所有内容,包括数据行记录、系统信息等。
Page分为几种类型,常见的页类型有数据页(B+tree Node)Undo页(Undo Log Page)系统页(System Page) 事务数据页(Transaction System Page)等
名称 | 占用大小 | 说明 |
---|---|---|
File Header | 38字节 | 文件头, 描述页信息 |
Page Header | 56字节 | 页头,页的状态 |
Infimum + Supremum | 26字节 | 最大和最小记录,这是两个虚拟的行记录 |
User Records | 不确定 | 用户记录,存储数据行记录 |
Free Space | 不确定 | 空闲空间,页中还没有被使用的空 |