数据页


InnoDB将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。当内存与磁盘数据不一致叫做脏页

页结构

数据结构 - 图2

名称 中文名 占用空间(字节) 描述
File Header 文件头部 38 页的一些通用信息
Page Header 页面头部 56 数据页专有的一些信息
Infimum + Supremum 最小记录和最大记录 26 两个虚拟的行记录
User Records 用户记录 不确定 实际存储的行记录内容
Free Space 空闲空间 不确定 页中尚未使用的空间
Page Directory 页面目录 不确定 页中的某些记录的相对位置
File Trailer 文件尾部 8 校验页是否完整


行格式


记录在磁盘上的存放方式也被称为行格式或者记录格式。设计InnoDB存储引擎的到现在为止设计了4种不同类型的行格式,分别是Compact、Redundant、Dynamic和Compressed行格式,随着时间的推移,他们可能会设计出更多的行格式,但是不管怎么变,在原理上大体都是相同的。


COMPACT行格式


数据结构 - 图3


Redundant行格式


数据结构 - 图4


Dynamic和Compressed行格式


这两种行格式类似于COMPACT行格式,只不过在处理行溢出数据时有点儿分歧,它们不会在记录的真实数据处存储字符串的前768个字节,而是把所有的字节都存储到其他页面中,只在记录的真实数据处存储其他页面的地址。
另外,Compressed行格式会采用压缩算法对页面进行压缩。


行溢出


一个页一般是16KB,当记录中的数据太多,当前页放不下的时候,会把多余的数据存储到其他页中,这种现象称为行溢出,一个数据页至少会保证有两条数据,如果一行数据就超过页大小数据会被截取放到其他数据页

(详见:https://juejin.cn/book/6844733769996304392/section/6844733770046636040)