mysql笔记九:表空间相关概念

关键字: 区、段、Segment Header、链表基节点、碎片区、数据字典

9.1、区(extent)

表空间是由多个区组成的。其中的每个区都由物理位置上连续的64个页组成,因为每个页的大小为16K,所以一个区的大小是1M。

InnoDB使用XDES Entry结构来描述一个区。一个区对应着一个XDES Entry结构,XDES Entry结构存在HSP_HDR类型页和XDES类型页中。

一个XDES结构占用40字节。

(1)Segment ID:该区所属段的段id(碎片区不存在这个值)

(2)ListNode:ListNode将XDES Entry结构组成了多个链表,对于一个表空间,XDES结构共存在3+(N*3)个XDES链表,N为索引段的个数。

       前3个链表是碎片区组成的链表,分别是:

       1、状态state为FREE的区组成的FREE链表,

       2、状态为FREE_FRAG的区组成的FREE_FRAG链表,

       3、状态为FULL_FRAG的区组成的FULL_FRAG链表。

       这个3个链表的基节点都存放在HSP_HDR类型页的file space header部分。

       每个索引段管理的区形成了3个链表,分别是:FREE链表、NOT_FULL链表、FULL链表。这3个链表的基节点存放在INODE结构中。

(3)state:表明了区的状态,共有4种,分别是:FREE、FREE_FRAG、FULL_FRAG、FSEG。前3个状态都是碎片区的状态,第4个状态表明了这个区附属于某个段。

(4)Page State Bitmap:16个字节=128位,128位显示了这个区的64个页面是否是空闲的。

9.2、段(Segment)

段是一个逻辑概念,一个索引存在2个段,分别是叶子节点段和非叶子节点段。一个段由32个碎片区中的页+一些所属与这个段的区构成。

InnoDB使用INODE Entry结构表示一个段,一个段对应了一个INODE Entry结构。INODE结构存放在INDOE类型页中。

一个INODE Entry结构占用192字节

(1)Segment ID:段id

(2)NOT_FULL_N_USER:在NOT_FULL列表中的区已经使用了多少页面

(3)3个List Base Node:3个链表基节点,就是上面说的FREE链表、NOT_FULL链表、FULL链表,这3个链表的基节点。

(4)Magic Number:标记这个INODE Entry结构是否初始化

(5)Fragment Array Entry 0-31:32个碎片区中的页的页号。

9.3、Segment Header结构

一个组里有256个区,区中第一个页面中有256个XDES Entry结构,所以XDES Entry结构能和区中的页面一一对应上。但是一个表空间中有很多索引,而Segment Entry结构只存在INODE类型页中,怎么做到一一对应呢?

答案在B+树的根节点上,每个索引都有一颗B+树,B+树的根节点上的Page Header部分,最后20字节分别是:

(1)PAGE_BTR_SEG_LEAF(10字节):B+树的叶子节点段INODE Entry结构的位置

(2)PAGE_BTR_SEG_TOP(10字节):B+树的叶子非节点段INODE Entry结构的位置

这10个字节称为Segment Header结构

9.4、链表基节点结构

HSP_HDR类型页中有3个XDES Entry链表基节点和2个INODE类型页组成的链表基节点;

INDOE结构中有3个XDES Entry链表基节点。

链表基节点的结构如图:

一个链表基节点占用16字节。

9.5、碎片区

不属于任何段的区称为碎片区,碎片区直属于表结构,碎片区上的页可以给多个段混合使用。

一个段在申请空间的时候,一开始是一个页一个页在碎片区上以页为单位申请的,当申请的页超过32个之后,就会以区为单位来申请空间,申请下来的区就属于这个段了,这个区就只能存这个段里的数据。

9.6、InnoDB数据字典

InnoDB中存在4张基本系统表,它们是所有表的源头,所有表的基本信息都存在这里。

这4张表分别是:

       1、sys_tables:所有表的信息;

       2、sys_columns:所有列的表;

       3、sys_indexes表:所有索引的表;

       4、sys_fields:所有索引对应列的信息。

这4张表我们是查不着的,但是是存在的。

这4张表存放在数据页中,形成B+树,这4张表共有5个索引,形成5棵B+树,B+树的根节点存放在Data dictionary Header结构页中。

(1)sys_tables:所有表的信息

       (name)           (id)         n_cols   type        mix_id     mix_len   cluster_id       space

       聚簇索引       二级索引

(2)sys_columns:所有列的表

       (table_id  pos)        name      mtype     prtype    len   prec

       聚簇索引

(3)sys_indexes表:所有索引表

       (table_id  id)   name      n_fields   type        space     page_no        merge_threshold

       聚簇索引

(4)sys_fields:所有索引对应列的信息

       (index_id pos)       col_name

       聚簇索引

注:sys_indexes表中的space和page_no定位了这个索引的B+树根节点的表空间号和页号。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值