mysql-innodb数据页结构


说明:

File Header 记录页的一些头信息,共占用38字节,组成部分如图:

innodb存储引擎中页的类型:

Page Header:记录数据页的状态信息,共占56个字节,组成部分如图:


infimum和supermum record:虚拟的行记录,限定记录的边界。infimum记录的是比页中任何主键都要小的值,supermum值比任何可能大的值还要大的值。在页创建时被创建,任何情况下不会被删除,在compact和redundant行格式下,占用的字节数不同。

User page和Free page:User page是实际存储行记录的内容,innodb表总是B+树索引组织的;Free page是指空闲空间,是一个链表结构,在一条记录被删除后,该空间会被加入到空闲链表中。

Page directory(页目录):存放了记录(页)的相对位置,有时这些记录指针称为slots(槽)或directory slots(目录槽),在innodb中并不是每行拥有一个槽,innodb的槽是一个稀疏目录,即一个槽可能包含多个记录。

注:B+树索引本身并不能找到具体的一条记录,只能找到该记录所在的页。数据库把页载入到内存中,通过page directory再进行二叉查找。

File trailer:检测页是否已经完整地写入磁盘(如:写入过程发生磁盘损坏,机器关闭等)由FIL_PAGE_END_LSN组成,占用8字节,前4字节代表该页的checksum值,最后4字节和File Header中FIL_PAGE_LSN相同,通过与FIle Header中FIL_PAGE_OR_CHECKSUM和FIL_PAGE_LSN进行比较,看是否一致,来保证页的完整性。

可以通过参数innodb_checksum来开启或关闭对页完整性的检查,(默认下,每次从磁盘读取一个页就会检测该页的完整性,即是否发生corrupt)

5.6.6之后,可以通过参数innodb_checksum_algorithm来控制检测checksum函数的算法,默认为crc32,可设置的值为:innodb、crc32、none(不启用)、strict_innodb、strict_crc32、strict_none



译者介绍:家华,从事mysqlDBA的工作,记录自己对mysql的一些总结


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值