mysql的ibd结尾的是什么⽂件_MySQLInnoDBibd⽂件格式解
析(fsphea。。。
上⼀篇⽂章《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字节f
sp 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:extentmysql下载32位
链表的双向指针节点,占⽤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,欢迎关注,交流。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论