InnoDB 独立表空间结构

区(extent)的概念

  • 对于 16KB 的页来说,连续的 64 个页就是一个区,也就是说一个区默认占用 1MB(16*64=1024KB) 空间大小。无论是系统表空间还是独立表空间,都可以看成是由若干个连续的区组成的,每 256 个区被划分成一组。每个组的最开始的几个页面类型是固定的。
  • 在表中的数据量很大时,为某个索引分配空间的时候就不再按照页为单位分配了,而是按照区为单位进行分配。

区的 4 种状态

  • FREE:空闲的区
  • FREE_FRAG:有剩余空闲页面的碎片区
  • FULL_FRAG:没有剩余空闲页面的碎片区
  • FSEG:附属于某个段的区

XDES Entry

每一个区都对应着一个 XDES Entry 结构,这个结构记录了对应的区的一些属性。
在这里插入图片描述

  • Segment ID (8 字节):每一个段都有一个唯一的编号,用 ID 表示。Segment ID 字段表示的就是该区所在的段,前提是该区已经被分配给某个段了,不然该字段的值没有意义。
  • List Node(12 字节):这个部分可以将若干个 XDES Entry 结构串连成一个链表。
    在这里插入图片描述
  • State(4 字节):这个字段表明区的状态。
  • Page State Bitmap(16 字节):这个部分共占用 16 字节,也就是 128 位。一个区默认有 64 个页,这 128 位被划分为 64 个部分,每个部分有 2 位,对应区中的一个页。这 2 个位中的第 1 位表示对应的页是否是空闲的,第 2 位还没有用到。

段的概念

  • 段是一些零散的页面以及一些完整的区的集合。
  • 存放叶子节点的区的集合就算是一个段(segment),存放非叶子节点的区的集合也算是一个段。也就是说一个索引会生成两个段:一个叶子节点段和一个非叶子节点段。
  • 碎片(fragment)区:在一个碎片区中,并不是所有的页都是为了存储同一个段的数据而存在的,碎片区中的页可以用于不同的目的,比如有些页属于段 A,有些页属于段 B,有些页甚至不属于任何段。碎片区直属于表空间,并不属于任何一个段
  • 为某个段分配存储空间的策略
    • 在刚开始向表中插入数据时,段是从某个碎片区以单个页面为单位来分配存储空间的。当某个段已经占用了 32 个碎片区页面之后,就会以完整的区为单位来分配存储空间。
    • 当某个段已经占用了 32 个碎片区页面之后,就会以完整的区为单位来分配存储空间(原先占用的碎片区页面并不会被复制到新申请的完整的区中)。

INODE Entry

每个段都定义了一个 INODE Entry 结构,如下图所示:
在这里插入图片描述
未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值