InnoDB表空间是用于管理和组织数据库表数据的基本单元,其中包含了多个区、段以及碎片区。以下是关于这些概念和结构的简要总结:
-
表空间(Tablespace) :
- InnoDB使用表空间来组织和管理表的数据。
- 包括系统表空间和独立表空间,其中系统表空间用于存储数据字典等系统信息。
-
区(Extent) :
- 区是表空间中的基本存储单元,通常包含连续的64个页。
- 区的引入是为了更好地管理页面,尤其是在数据量大的情况下可以减少随机I/O。
-
段(Segment) :
- 段是由多个区组成的逻辑存储结构,每个索引对应两个段:叶子节点段和非叶子节点段。
- 段的分配策略包括从碎片区中逐页分配,以及当段需要大量空间时以完整的区为单位分配。
-
碎片区(Fragment) :
- 碎片区是为了避免对于数据量较小的表分配完整区而引入的概念。
- 碎片区中的页可以用于不同段的数据,直属于表空间,不属于任何特定段。
-
XDES Entry:
- XDES(Extent Descriptor Entry)用于管理区的结构,包含区的状态、链表节点信息等。
- 每个XDES Entry对应一个区,用于在FREE、FREE_FRAG、FULL_FRAG和FSEG状态之间切换。
-
系统表空间:
- 整个MySQL进程只有一个系统表空间,用于存储系统表和数据字典等信息。
- 包含一些关键的系统表,如SYS_TABLES、SYS_COLUMNS、SYS_INDEXES、SYS_FIELDS。
-
链表管理:
- 通过List Base Node结构来管理FREE、FREE_FRAG、FULL_FRAG链表的头尾节点信息。
- 通过XDES Entry中的List Node来将相同状态的区连接成链表,方便管理和分配。