趣文网 > 作文大全

MySQL InnoDB ibd 文件格式解析(fsp header & xdes entry)

2020-12-06 09:40:02
相关推荐

上一篇文章《MySQL InnoDB ibd 文件格式解析》,介绍了ibd文件的基本结构,ibd文件通常由大小为16k的页组成,页分为页头、页身和页尾。在页头有2个字节存储页类型(page type),页类型有很多种类,不同的种类有不同的作用,本文将介绍类型为FIL_PAGE_TYPE_FSP_HDR的页结构,它通常是ibd文件的第一个页,也是非常重要的一种页类型。

FIL_PAGE_TYPE_FSP_HDR页整体结构:

FIL_PAGE_TYPE_FSP_HDR页主要包含2种数据结构,分别为fsp header和xdes entry。fsp header固定为112字节,fsp header之后为xdes entry数组,一共256个元素,元素大小固定为40字节,256个总大小为256*40=10240。整体结构见下图:

fsp header结构:

fsp header主要包含表空间id,已使用的页数量,flags以及多个链表头结构等等,具体见下图:

fsp header占用112字节,其中的字段含义如下:

space id:表空间id,4字节unused:未使用,4字节highest page number in file:文件中使用的最大页号,4字节highest page number initialized:已经初始化的最大页号,4字节flags:fsp header标记,4字节number of pages used in "FREE_FRAG" list:FREE_FRAG链表中已经使用的页数量,4字节"FREE" list:FREE链表头,16字节FREE_FRAG:FREE_FRAG链表头,16字节FULL_FRAG:FREE_FRAG链表头,16字节next unused segment id:下一个未使用的段id,8字节FULL_INODES:FULL_INODES链表头,16字节FREE_INODES:FREE_INODES链表头,16字节fsp flags结构:

fsp flags 4字节大小,按大端字节序转换成4字节整数,这个整数不同的bit有不同的含义,具体如下:

第1位,表示POST_ANTELOPE field第2~5位,表示ZIP_SSIZE field第6位,表示ATOMIC_BLOBS field第7到10位,表示PAGE_SSIZE field第11位,表示DATA_DIR field第12位,表示SHARED field第13位,表示TEMPORARY field第14位,表示ENCRYPTION field第15到32位,未使用innodb通过fsp flags来判断表空间的各种属性,比如是否压缩,是否加密,是否为共享表空间、临时表空间等等。

文件链表:

fsp header结构中大量使用了文件链表头结构(FLST_BASE_NODE),16个字节,前4字节存储链表长度,中间6字节指向链表头节点,最后6字节指向链表尾节点。

FLST_BASE_NODE结构如下:

FLST_FIRST和FLST_LAST分别指向链表的第一个节点和最后一个节点。6字节的结构分为两部分,4字节为页号,2字节为页内偏移。通过页号和页内偏移来定位链表节点的位置。具体结构如下:

xdes entry:

在介绍xdes entry之前,先来了解一下ibd文件的物理结构。一个ibd文件称之为一个表空间,有唯一的表空间id,表空间内部由一个一个连续的页组成,从页号为0的页开始,连续的64个页称之为一个簇( extent),为了组织管理这些extent,每个extent都有一个40字节的xdes entry,来标记extent内哪些页已被使用,哪些页空闲。先来看下xdes entry结构,如下:

file segment id:段id,如果extent属于某个段的话,记录其段id,占用8个字节xdes list node:extent链表的双向指针节点,占用12个字节,fsp header中的链表头指向的目标就是这里state:该extent的状态,比如空闲或者已完全被使用等等,该状态是枚举类型,值为XDES_FREE,XDES_FREE_FRAG,XDES_FULL_FRAG,XDES_FSEG,占用4字节page state bitmap: 用2个bit表示extent中的一个page,其中一个bit表示该page是否是空闲(XDES_FREE_BIT),另一个bit保留,尚未使用(XDES_CLEAN_BIT),占用16字节,16*8/2=64,正好可以标记一个extent 64个页的使用情况最后:

本文简单介绍了ibd文件fsp header和xdes entry的结构及其每个字段的含义,我们可以使用hexdump工具实际观察一下ibd文件的二进制结构,加深对ibd文件结构的理解。本文涉及的MySQL源码版本为5.7.19,欢迎关注,交流。

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

关于电的作文 英语作文我的大学 农村生活英语作文 别人帮我的作文400字 观后感英语作文 爱使我坚强作文 关于桥的作文800字 作文名 关于清明节由来的作文 采访作文100字 读你作文800字 写景作文400字以上 我依然相信作文600字 回忆学校的作文 古诗改写作文200字 金边凤尾裙作文 最美的相遇作文600字 感谢师恩作文 2013湖北高考作文题 小猫作文说明文 森林运动会童话作文 雷锋的作文400字 四年级作文批改评语 感谢国家资助作文800字 知易行难的作文 糖炒栗子的作文 妈妈教我包饺子作文 为人生着色作文 校园的回忆作文 热心的邻居作文