FSP_IBUF_TREE_ROOT_PAGE_NO
用于存储change buffer的根page,change buffer目前存储于Ibdata中,其本质上也是一颗btree,root页为固定page,也就是Ibdata的第5个page。
IBUF HEADER Page 和Root Page联合起来对ibuf的数据页进行管理。
首先Ibuf btree自己维护了一个空闲Page链表,链表头记录在根节点中,偏移量在PAGE_BTR_IBUF_FREE_LIST处,实际上利用的是普通索引根节点的PAGE_BTR_SEG_LEAF字段。Free List上的Page类型标示为FIL_PAGE_IBUF_FREE_LIST
每个Ibuf page重用了PAGE_BTR_SEG_LEAF字段,以维护IBUF FREE LIST的前后文件页节点(PAGE_BTR_IBUF_FREE_LIST_NODE)。
由于root page中的segment字段已经被重用,因此额外的开辟了一个Page,也就是Ibdata的第4个page来进行段管理。在其中记录了ibuf btree的segment header,指向属于ibuf btree的inode entry。
关于ibuf btree的构建参阅函数 btr_create
FSP_TRX_SYS_PAGE_NO/FSP_FIRST_RSEG_PAGE_NO
ibdata的第6个page,记录了InnoDB重要的事务系统信息,主要包括:
TRX_SYS 38 每个数据页都会保留的文件头字段
TRX_SYS_TRX_ID_STORE 8 持久化的最大事务ID,这个值不是实时写入的,而是256次递增写一次
TRX_SYS_FSEG_HEADER 10 指向用来管理事务系统的segment所在的位置
TRX_SYS_RSEGS 128 * 8 用于存储128个回滚段位置,包括space id及page no。每个回滚段包含一个文件segment(trx_rseg_header_create)
…… 以下是Page内UNIV_PAGE_SIZE - 1000的偏移位置
TRX_SYS_MYSQL_LOG_MAGIC_N_FLD 4 Magic Num ,值为873422344
TRX_SYS_MYSQL_LOG_OFFSET_HIGH 4 事务提交时会将其binlog位点更新到该page中,这里记录了在binlog文件中偏移量的高位的4字节
TRX_SYS_MYSQL_LOG_OFFSET_LOW 4 同上,记录偏移量的低4位字节
TRX_SYS_MYSQL_LOG_NAME 4 记录所在的binlog文件名
…… 以下是Page内UNIV_PAGE_SIZE - 200 的偏移位置
TRX_SYS_DOUBLEWRITE_FSEG 10 包含double write buffer的fseg header
TRX_SYS_DOUBLEWRITE_MAGIC 4 Magic Num
TRX_SYS_DOUBLEWRITE_BLOCK1 4 double write buffer的第一个block(占用一个Extent)在ibdata中的开始位置,连续64个page
TRX_SYS_DOUBLEWRITE_BLOCK2 4 第二个dblwr block的起始位置
TRX_SYS_DOUBLEWRITE_REPEAT 12 重复记录上述三个字段,即MAGIC NUM, block1, block2,防止发生部分写时可以恢复
TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED 4 用于兼容老版本,当该字段的值不为TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED_N时,需要重置dblwr中的数据
在5.7版本中,回滚段既可以在ibdata中,也可以在独立undo表空间,或者ibtmp临时表空间中,一个可能的分布如下图所示(摘自我之前的这篇文章)。
InnoDB Undo 回滚段结构
由于是在系统刚启动时初始化事务系统,因此第0号回滚段头页总是在ibdata的第7个page中。
事务系统创建参阅函数 trx_sysf_create
InnoDB最多可以创建128个回滚段,每个回滚段需要单独的Page来维护其拥有的undo slot,Page类型为FIL_PAGE_TYPE_SYS。描述如下:
MacrobytesDescTRX_RSEG 38 保留的Page头
TRX_RSEG_MAX_SIZE 4 回滚段允许使用的最大Page数,当前值为ULINT_MAX
TRX_RSEG_HISTORY_SIZE 4 在history list上的undo page数,这些page需要由purge线程来进行清理和回收
TRX_RSEG_HISTORY FLST_BASE_NODE_SIZE(16) history list的base node
TRX_RSEG_FSEG_HEADER (FSEG_HEADER_SIZE)10 指向当前管理当前回滚段的inode entry
TRX_RSEG_UNDO_SLOTS 1024 * 4 undo slot数组,共1024个slot,值为FIL_NULL表示未被占用,否则记录占用该slot的第一个undo page
回滚段头页的创建参阅函数 trx_rseg_header_create