「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」
数据页存储格式
MySQL在进行数据操的时候最小单元是数据页,每个数据页默认大小有16KB,一行行的数据存放到数据页里,数据页拆分成很多个部分,大体为:文件头,数据页头,最小记录,最大记录,多个数据行,空闲空间,数据页目录,文件尾部。
其中文件头占据38个字节,数据页头占据56个字节,最大记录和最小记录占据26字节,数据行区域的大小是不固定的,空闲区域的大小也是不固定,数据页目录的小小也是不固定,文件尾部占据8个字节。
表空间及数据区
在平时创建的表,都有一个表空间的概念,在磁盘上对应着表名.ibd这样的磁盘数据文件,在物理层面,表空间就是对应一些磁盘上的数据文件。一个表空间的磁盘文件里,有很多个数据页,一个表空间包含的数据页太多,不便于管理,所以在表空间里引入了数据区(extent)的概念,一个数据区对应着连续的64个数据页,每个数据页是16KB,所以一个数据区是1MB,然后256个数据区被划分为一组。 对于表空间,第一组数据区的第一个数据区的前3个数据页,都是固定的,里面存放一些描述性的数据。
- FSP_HDR数据页:存放表空间和这一组数据区的一些属性
- IBUF_BITMAP数据页:存放的是这一组数据页的所有insert buffer的一些信息
- INODE数据页:存放一些特殊的信息
然后这个表空间的其他各组数据区,每一组数据区的第一个数据区的头两个数据页,都是存放特殊信息
- XDES数据页:存放这一组数据区的一些相关属性
大概磁盘存储模式是这样的:创建的那些表都是有对应的表空间,每个表空间就是对应磁盘上的数据文件,在表空间里有很多组数据区,一组数据区是256个数据区, 每个数据区包含64个数据页,是1MB,然后表空间的第一组数据区的第一个数据区的头三个数据页,存放特殊信息; 表空间的其他组数据区的第一个数据区的头两个数据页,也存放特殊信息。