MySQL 引擎特性 InnoDB 文件系统之文件物理结构(2)

FLST_BASE_NODE:

MacrobytesDesc
FLST_LEN   4   存储链表的长度  
FLST_FIRST   6   指向链表的第一个节点  
FLST_LAST   6   指向链表的最后一个节点  

FLST_NODE:

MacrobytesDesc
FLST_PREV   6   指向当前节点的前一个节点  
FLST_NEXT   6   指向当前节点的下一个节点  

如上所述,文件链表中使用6个字节来作为节点指针,指针的内容包括:

MacrobytesDesc
FIL_ADDR_PAGE   4   Page No  
FIL_ADDR_BYTE   2   Page内的偏移量  

该链表结构是InnoDB表空间内管理所有page的基础结构,下图先感受下,具体的内容可以继续往下阅读。

InnoDB 表空间page管理

InnoDB 表空间page管理

文件链表管理的相关代码参阅:include/fut0lst.ic, fut/fut0lst.cc

FSP_HDR PAGE

数据文件的第一个Page类型为FIL_PAGE_TYPE_FSP_HDR,在创建一个新的表空间时进行初始化(fsp_header_init),该page同时用于跟踪随后的256个Extent(约256MB文件大小)的空间管理,所以每隔256MB就要创建一个类似的数据页,类型为FIL_PAGE_TYPE_XDES ,XDES Page除了文件头部外,其他都和FSP_HDR页具有相同的数据结构,可以称之为Extent描述页,每个Extent占用40个字节,一个XDES Page最多描述256个Extent。

FSP_HDR页的头部使用FSP_HEADER_SIZE个字节来记录文件的相关信息,具体的包括:

MacrobytesDesc
FSP_SPACE_ID   4   该文件对应的space id  
FSP_NOT_USED   4   如其名,保留字节,当前未使用  
FSP_SIZE   4   当前表空间总的PAGE个数,扩展文件时需要更新该值(fsp_try_extend_data_file_with_pages)  
FSP_FREE_LIMIT   4   当前尚未初始化的最小Page No。从该Page往后的都尚未加入到表空间的FREE LIST上。  
FSP_SPACE_FLAGS   4   当前表空间的FLAG信息,见下文  
FSP_FRAG_N_USED   4   FSP_FREE_FRAG链表上已被使用的Page数,用于快速计算该链表上可用空闲Page数  
FSP_FREE   16   当一个Extent中所有page都未被使用时,放到该链表上,可以用于随后的分配  
FSP_FREE_FRAG   16   FREE_FRAG链表的Base Node,通常这样的Extent中的Page可能归属于不同的segment,用于segment frag array page的分配(见下文)  
FSP_FULL_FRAG   16   Extent中所有的page都被使用掉时,会放到该链表上,当有Page从该Extent释放时,则移回FREE_FRAG链表  
FSP_SEG_ID   8   当前文件中最大Segment ID + 1,用于段分配时的seg id计数器  
FSP_SEG_INODES_FULL   16   已被完全用满的Inode Page链表  
FSP_SEG_INODES_FREE   16   至少存在一个空闲Inode Entry的Inode Page被放到该链表上  

在文件头使用FLAG(对应上述FSP_SPACE_FLAGS)描述了创建表时的如下关键信息:

MacroDesc
FSP_FLAGS_POS_ZIP_SSIZE   压缩页的block size,如果为0表示非压缩表  
FSP_FLAGS_POS_ATOMIC_BLOBS   使用的是compressed或者dynamic的行格式  
FSP_FLAGS_POS_PAGE_SSIZE   Page Size  
FSP_FLAGS_POS_DATA_DIR   如果该表空间显式指定了data_dir,则设置该flag  
FSP_FLAGS_POS_SHARED   是否是共享的表空间,如5.7引入的General Tablespace,可以在一个表空间中创建多个表  
FSP_FLAGS_POS_TEMPORARY   是否是临时表空间  
FSP_FLAGS_POS_ENCRYPTION   是否是加密的表空间,MySQL 5.7.11引入  
FSP_FLAGS_POS_UNUSED   未使用的位  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/92d804ea01a22ee9e899ff74b884f3f1.html