MySQL表空间

MySQL表空间

1. MySQL中的表

1.1 IOT表

在inodb存储引擎中,表是根据主键来组织存放的,这种存储方式称之为```Index organized table(IOT)索引组织表.
IOT表的选择主键方式为:
a. 表中定义的primary key
b. 判断表中是否有非空唯一主键
c. 表中的隐藏字段(row id)

ps: 主键的选择根据的是定义索引的顺序,而不是建表的顺序

1.2 InnoDB逻辑存储结构

图示:
在这里插入图片描述
InnoDB表是存储在表空间中的,表空间只是一个逻辑的概念,表数据实际是存储在页面里的。

2. 独立表空间

2.1 段 segment

2.1.1 段的概念

段是逻辑的概念,由完整的区和碎片页组成。

2.1.2 段的分类

一个索引分为叶子节点段和非叶子节点段。

段中的数据结构图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.2.1 叶子节点段
主要结构
  • INODE entry结构
    一个段里包括多个区,那么INODE Entry就是段的索引。
    INODE Entry结构包括零散的页面和三个基节点。

    基节点如下:

    1. List Base Node For Free List :空闲的区
    2. List Base Node For NOT_FULL list: 有剩余页面的碎片区
    3. List Base Node For FULL List: 表示段里已经使用完的页面

以上链表基节点的逻辑结构如下:

column coment
Segmen ID 段ID
NOT_FULL_N_USED 在NOT FULL链表内已经使用的页面
list base node for free list 空闲的区
list base node for not_full list 有剩余页面的碎片区
magic number 标记INODE Entry是否已经被初始化
fragement array entry 记录了零散页面的页号
list base node for full list 表示段里已经使用完的页面

  • 一个区是由64个连续的数据页组成的.主要包括以下结构:
  1. XDES Entry 结构
    我们可以理解为XDES entry结构体就是区的索引。
    有关XDES Entry的详细讲解可以参考 《2.2 区》章节。
    • FSEG 附属于某个段的区
2.1.2.2 非叶子节点段

和叶子节点段拥有相同的数据结构

2.1.3 碎片区

就是在一个碎片区中,并不是所有的页都是为了存储同一个段的数据而存在的。可以说碎片区是独立存在表空间中和段是并级的。碎片区直属于表空间,并不属于任何一个段。
在刚开始写数据时,并不是从完整的区中申请一个数据页,而是先从碎片区中申请,当碎片区中已经使用了32个数据页时,才会申请一个完整的区装数据。这样设计是为了避免创建小表占用空间过大的问题。

如果用户新创建一张表只有一条数据,且不用碎片区的话,innodb会新开辟一个区,那就是1MB,对于一个只有1行数据的表来说,1MB空间有点大了,故此设计碎片区

2.2 区

2.2.1 区的概念

连续的64个数据页,大概是1M,这64个数据页页号是连续的。
一个段由多个组组成,而256个区构成一组,其中这256个区也是连续的。

第一组最开始的三个页面类型是固定的,分别是FSD_HDR,IBUF_BITMAP,INODE。也就是说第一组的每个区都是以这三个页面开头的。

其余组,例如第二,第3组的开头是XDES,IBUF_BITMAP类型的数据页。

如下图所示:
在这里插入图片描述

2.2.2 区的结构
2.2.2.1 XDES Entry结构
  • XDES entry数据结构

XDES entry结构总共占用40个字节。

column comment value
segmentID 段的唯一编号
list node 链表类型 可选值为: pre node offset(指向前一个xdes entry结构)/next node page number/next node offset(指向后一个xdes entry结构)
state 该区的使用状态 FREE,FREE_FRAGE,FULL_FRAG,FSEG
page state bitmap 区中每个页的使用情况
  • 表空间下 XDES entry结构
    xdes entry详细结构参考上方,表空间下的XDES和段中的XDES唯一的区别就是生成的链表不太一样。在表空间会生成FREE,FREE_FRAG,FULL_FRAG,FSEG四个链表。

  • 段中区的XDES entry结构

在段中会生成FREE,NOT_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值