InnoDB磁盘结构详解 深入探究InnoDB的磁盘结构(2)
导读:InnoDB磁盘结构详解,页 页是InnoDB中管理数据的最小单元,是固定大小的一段连续磁盘空间,默认为 16KB ,用于存放数据、索引等各种类型的数据。 InnoDB中,常见的页类型有数
InnoDB磁盘结构详解
页
页是InnoDB中管理数据的最小单元,是固定大小的一段连续磁盘空间,默认为16KB,用于存放数据、索引等各种类型的数据。
InnoDB中,常见的页类型有数据索引页、undo page、文件管理页FSP_HDR/XDES、插入缓冲IBUF_BITMAP页、INODE页等。
在InnoDB中的设计中,页与页之间是通过一个双向链表连接起来,而存储在页中的数据行则是通过单链表连接起来的,如下图:

页有通用的文件头和尾(将页的内容进行封装,通过文件头和文件尾的checksum方式来确保页的完整性),但是中部的内容根据页的类型不同而发生变化。我们主要关注数据页和索引页,这种类型的页包括七个部分:
- File Header:文件头,共38B,记录了页的地址、页号、上一页和下一页指针、页的类型信息、页的校验和checksum(校验和在写入磁盘前计算得到,当从磁盘中读取时,重新计算校验和并与数据页中存储的对比,如果发现不同,则会导致MySQL crash)、日志序列位置(LSN,Log Sequence Number,表示日志文件的长度,一个不断递增的unsigned long类型整数)等。
- Page Header:数据页头,用来记录数据页的状态信息,包括Free Space的地址、本页中的记录的数量、标记为删除的记录等,共56B。
- System records:Infimum + Supremum Records。InnoDB每页中有两个虚拟的行记录,用来限定记录的边界。Infimum记录是比该页中任何主键值都要小的记录,Supremum记录是比该页中任何主键值都要大的记录。这两个记录在页创建时被建立,并且在任何情况下不会被删除,并且由于这两条记录不是我们自己定义的记录,所以它们并不存放在页的User Records部分。所以如果数据是顺序存储的,那么查询数据是否在某一页中就无需遍历页中的所有数据,只需判断这两个记录就行了。
- User Records:用户记录,以单链表的形式存储,如下图:

- Free Space:空闲空间,用于存放新记录。在一开始生成页的时候,并没有User Records这个部分,每当插入一条记录,就会从Free Space部分中申请一个记录大小的空间到User Records部分,当Free Space用完时,这个页也就使用完了。
- Page Directory:数据目录(弥补单向链表查询性能差的缺点),InnoDB会把页中的记录划分为若干个组,每个组的最后一个记录的地址偏移量作为一个槽,存放在Page Directory中,便于二分查找定位数据。对于分组中的记录数是有规定的:Infimum记录所在的分组只能有 1 条记录,Supremum记录所在的分组中的记录条数只能在1~8条之间,中间的其它分组中记录数只能在是4~8条之间。所以如果数据是顺序存储的,那么查询数据在某一页的位置就无需遍历页中的所有数据,只通过二分法就可以快速定位到对应的槽,然后再遍历该槽对应分组中的记录就能知道了。
相关阅读
-
内存不兼容怎么解决 内存不兼容升级bios解决方法
本文摘要:内存不兼容怎么解决和内存不兼容升级bios解决方法方面的知识,一定能解决您的问题的,一起来了解吧! 内存是工业主板中重要的部件之一,主要用于暂存CPU中的运算数据和外部存
-
ipv6无internet访问权限是什么意思 ipv4与ipv6无internet访问权限是什么意思
一篇小知识,与您分享ipv6无internet访问权限是什么意思的相关经验,关于ipv6无internet访问权限是什么意思,接下来小编为网友介绍。 ipv6无internet访问权限,意思是没有从DHCP服务器获得分配的
-
主板acpi设置 Win7主板不支持acpi解决教程
本文核心内容:Win7主板不支持acpi解决教程IT技巧方面的经验,关于主板acpi设置 Win7主板不支持acpi解决教程,一起跟随小编看看吧! 使用win7系统刷bios的时候,有很多的用户遇到了不支持acpi的
-
迅捷路由器初始密码手机设置 忘记家里的wifi密码的解决技巧
今天小编介绍迅捷路由器初始密码手机设置和忘记家里的wifi密码的解决技巧的介绍,一起来看看吧! 迅捷(FAST)路由器怎么隐藏wifi信号?家里有一台迅捷(FAST)无线路由器,为了防止被别人蹭网


