表空间
是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd
的实际文件。大家可以把表空间想象成被切分为许许多多个页
的池子,当我们想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。本章内容会深入到表空间的各个细节中,带领大家在InnoDB
存储结构的池子中畅游。
页面类型
再一次强调,InnoDB是以页为单位管理存储空间的,我们的聚簇索引(也就是完整的表数据)和其他的二级索引都是以B+
树的形式保存到表空间的,而B+
树的节点就是数据页。我们前边说过,这个数据页的类型名其实是:FIL_PAGE_INDEX
,除了这种存放索引数据的页面类型之外,InnoDB也为了不同的目的设计了若干种不同类型的页面,为了唤醒大家的记忆,我们再一次把各种常用的页面类型提出来:
类型名称 | 十六进制 | 描述 |
---|---|---|
FIL_PAGE_TYPE_ALLOCATED |
0x0000 | 最新分配,还没使用 |
FIL_PAGE_UNDO_LOG |
0x0002 | Undo日志页 |
FIL_PAGE_INODE |
0x0003 | 段信息节点 |
FIL_PAGE_IBUF_FREE_LIST |
0x0004 | Insert Buffer空闲列表 |
FIL_PAGE_IBUF_BITMAP |
0x0005 | Insert Buffer位图 |
FIL_PAGE_TYPE_SYS |
0x0006 | 系统页 |
FIL_PAGE_TYPE_TRX_SYS |
0x0007 | 事务系统数据 |
FIL_PAGE_TYPE_FSP_HDR |
0x0008 | 表空间头部信息 |
FIL_PAGE_TYPE_XDES |
0x0009 | 扩展描述页 |
FIL_PAGE_TYPE_BLOB |
0x000A | BLOB页 |
FIL_PAGE_INDEX |
0x45BF | 索引页,也就是我们所说的数据页 |
因为页面类型前边都有个FIL_PAGE
或者FIL_PAGE_TYPE
的前缀,为简便起见我们后边唠叨页面类型的时候就把这些前缀省略掉了,比方说FIL_PAGE_TYPE_ALLOCATED
类型称为ALLOCATED
类型,FIL_PAGE_INDEX
类型称为INDEX
类型。
页面通用部分
我们前边说过数据页,也就是INDEX
类型的页由7个部分组成,其中的两个部分是所有类型的页面都通用的。当然我不能寄希望于你把我说的话都记住,所以在这里重新强调一遍,任何类型的页面都有下边这种通用的结构: