InnoDB数据页结构
InnoDB页介绍一下?
- InnoDB 是一个将表中的数据存储到磁盘上的存储引擎,当我们想从表中获取某些记录时,InnoDB 采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB 内容刷新到磁盘中。
- InnoDB 为了不同的目的而设计了许多种不同类型的页 ,比如存放表空间头部信息的页,存放 Insert Buffer 信息的页,存放 INODE 信息的页,存放 undo 日志信息的页。存放我们表中记录的那种类型的被称为索引( INDEX )页。
InnoDB数据页的大小为什么是16KB?
- 在操作系统的文件管理系统中进行一次IO读写,默认读取的大小为4kb(一页)。
- 又因为局部性原理,操作系统会将命中的页周围的三块页一同加载进Innodb的缓存池中,因此Innnodb数据页的大小为16kb。
数据页结构?
数据页代表的这块 16KB 大小的存储空间可以被划分为多个部分,不同部分有不同的功能,各个部分如图所示:
数据页中查找指定主键值的过程?
在一个数据页中查找指定主键值的记录的过程分为两步:
- 通过二分法确定该记录所在的槽,并找到该槽中主键值最小的那条记录。
- 通过记录的 next_record 属性遍历该槽所在的组中的各个记录。
数据页总结
- InnoDB为了不同的目的而设计了不同类型的页,我们把用于存放记录的页叫做 数据页 。
- 一个数据页可以被大致划分为7个部分,分别是
-File Header ,表示页的一些通用信息,占固定的38字节。
-Page Header ,表示数据页专有的一些信息,占固定的56个字节。
-Infimum + Supremum ,两个虚拟的伪记录,分别表示页中的最小和最大记录,占固定的 26 个字节。
-User Records :真实存储我们插入的记录的部分,大小不固定。
-Free Space :页中尚未使用的部分,大小不确定。
-Page Directory :页中的某些记录相对位置,也就是各个槽在页面中的地址偏移量,大小不固定,插入的记录越多,这个部分占用的空间越多。
-File Trailer :用于检验页是否完整的部分,占用固定的8个字节。 - 每个记录的头信息中都有一个 next_record 属性,从而使页中的所有记录串联成一个单链表 。
- InnoDB 会为把页中的记录划分为若干个组,每个组的最后一个记录的地址偏移量作为一个槽 ,存放在Page Directory 中,所以在一个页中根据主键查找记录是非常快的,分为两步:
- 通过二分法确定该记录所在的槽。
- 通过记录的next_record属性遍历该槽所在的组中的各个记录。
- 每个数据页的 File Header 部分都有上一个和下一个页的编号,所以所有的数据页会组成一个双链表 。
- 为保证从内存中同步到磁盘的页的完整性,在页的首部和尾部都会存储页中数据的校验和和页面最后修改时
对应的 LSN 值,如果首部和尾部的校验和和 LSN 值校验不成功的话,就说明同步过程出现了问题。
评论