InnoDB INODE 页结构

1. Inode是用来管理一个段的,简单说,一个Inode就是代表一个数据段.Inode可以说是一个结构体,它也是像上面一样,按顺序存储到Inode页面中,一个Inode页面可以存储多个Inode节点.如果页面中所有的空间都用来存放已经使用的Inode,则这个页面就称为满Inode页面,否则为半满Inode页面.

2. 当表空间的FSP_SEG_INODES_FREE中没有空闲的INODE时,就从表空间分配一个页作为INODE页;即INODE页的分配有表空间来管理, 即FSP_SEG_INODES_FREE, FSP_SEG_INODES_FULL两个链表来管理所有当前表空间的INODE页。所有的INODE页将有双向链表来管理。即FLS_PREV和FLS_NEXT是双向链表的前向后后向指针。

3. INODE节点是一个段原来管理该段下所有的extend(簇)。



下面两个字段是双向链表的节点,这个节点会被连接到表空间页中的FSP_SEG_INODES_FREE或FSP_SEG_INODES_FULL的链表中
FLST_PREV, FIL_ADDR_BYTE 指向前一个INODE页双向链表节点
FLST_NEXT, FIL_ADDR_BYTE 指向后一个INODE页双向链表节点
FSEG_ID 段ID, 当新分配一个段时,从表空间头页(FIL_PAGE_TYPE_FSP_HDR)的FSP_SEG_ID记录中读取赋给这个,然后FIL_PAGE_TYPE_FSP_HDR中的FSP_SEG_ID加一作为下一个段的段ID
FSEG_NOT_FULL_N_USED
从上面叙述中知道,表空间控制信息中有满簇链表,半满簇链表,空闲簇链表,而段的Inode信息  中也有这些信息,这两个其实是不同的,表空间中的链表管理的是整个表空间中所有的簇,  包括满簇、半满簇及空闲簇,而段的Inode信息中管理的是属于自己段中的满簇,半满簇及空闲簇. 
当段新申请一个簇时,如果段上面没有空闲的簇,此时它会从表空间的簇链表中找,找到后从  相应链表中摘下来挂到段空闲簇链表中;
这个地址用来存储上面半满簇链表中所有已经使用的页面总数, 在部分使用的extents中使用中的page总数目 4个byte;主要用于统计半满链表中已经使用了多少个页
FSEG_FREE
这个地址用来存储所有属于这个段的空闲簇的链表头指针,这些extent是从表空间的FSP_FREE链表中获取的: 属于该segment的空闲的extents的列表
FSEG_NOT_FULL
一个段管理很多簇,这些簇都是属于这个段的,这个地址是用来存储所有半满簇的链表头指针部分使用的extents
FSEG_FULL
这个地址用来存储所有满簇的链表头指针 ,全部被使用的extents
FSEG_MAGIC_N
Magic Number: The value 97937874 is stored as a marker that this file segment INODE entry has been properly initialized.
FSEG_FRAG_ARR
这个数组是用来管理从表空间直接分配的页的页号,当这个数组用完时,则只能从表空间先分配extent到inode的空闲链表(FSEG_FREE),再从inode管理的extent中分配.


1. 每个INODE ENTRY管理一个段(如索引段(即B+树的内部节点)下的所有extend(簇),数据段(B+树的叶子节点),回滚段等等),这个段下的所有页由extend(簇)来管理



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值