InnoDB表空间

104 阅读2分钟

InnoDB表空间是用于管理和组织数据库表数据的基本单元,其中包含了多个区、段以及碎片区。以下是关于这些概念和结构的简要总结:

  1. 表空间(Tablespace)

    • InnoDB使用表空间来组织和管理表的数据。
    • 包括系统表空间和独立表空间,其中系统表空间用于存储数据字典等系统信息。
  2. 区(Extent)

    • 区是表空间中的基本存储单元,通常包含连续的64个页。
    • 区的引入是为了更好地管理页面,尤其是在数据量大的情况下可以减少随机I/O。
  3. 段(Segment)

    • 段是由多个区组成的逻辑存储结构,每个索引对应两个段:叶子节点段和非叶子节点段。
    • 段的分配策略包括从碎片区中逐页分配,以及当段需要大量空间时以完整的区为单位分配。
  4. 碎片区(Fragment)

    • 碎片区是为了避免对于数据量较小的表分配完整区而引入的概念。
    • 碎片区中的页可以用于不同段的数据,直属于表空间,不属于任何特定段。
  5. XDES Entry

    • XDES(Extent Descriptor Entry)用于管理区的结构,包含区的状态、链表节点信息等。
    • 每个XDES Entry对应一个区,用于在FREE、FREE_FRAG、FULL_FRAG和FSEG状态之间切换。
  6. 系统表空间

    • 整个MySQL进程只有一个系统表空间,用于存储系统表和数据字典等信息。
    • 包含一些关键的系统表,如SYS_TABLES、SYS_COLUMNS、SYS_INDEXES、SYS_FIELDS。
  7. 链表管理

    • 通过List Base Node结构来管理FREE、FREE_FRAG、FULL_FRAG链表的头尾节点信息。
    • 通过XDES Entry中的List Node来将相同状态的区连接成链表,方便管理和分配。