MySQL读书笔记-数据页格式

旧街凉风 提交于 2020-02-04 10:00:14

数据页格式

在这里插入图片描述

field description
File Header 文件头
Page Header 页头
Infimum + Supremun Record
User Records 用户记录,即行记录
Free Space 空闲空间
Page Directory 页目录
File Trailer 文件结尾信息

File Header

总共38字节。

field size description
FIL_PAGE_SOACE_OR_SUM 4 4.0.14之前为0
4.0.14之后为当页的checksum
FIL_PAGE_OFFSET 4 表空间中页的偏移量
FIL_PAGE_PREV 4 上一页
FIL_PAGE_NEXT 4 下一页
FIL_PAGE_LSN 8 最后被修改日志序列LSN
FIL_PAGE_TYPE 2 innodb存储引擎页类型
FIL_PAGE_FILE_FLUSH_LSN 8 仅在系统表空间中有定义
独立表空间为0
FIL_PAGE_ARCH_NO_OR_SPACE_ID 4 4.1开始,表示该页属于哪个表空间

其中存储页类型如下

name hex description
FIL_PAGE_INDEX 0x45BF B+B^+树叶节点
FIL_PAGE_UNDO_LOG 0x0002 undo log
FIL_PAGE_INODE 0x0003 索引节点
FIL_PAGE_IBUF_FREE_LIST 0x0004 insert buffer空闲列表
FIL_PAGE_TYPE_ALLOCATED 0x0000 该页为最新分配
FIL_PAGE_IBUF_BITMAP 0x0005 insert buffer最新位图
FIL_PAGE_TYPE_SYS 0x0006 系统页
FIL_PAGE_TYPE_TRX_SYS 0x0007 事务系统数据
FIL_PAGE_TYPE_FSP_HDR 0x0008 FILE_SPACE_HEADER
FIL_PAGE_TYPE_XDES 0x0009 扩展描述页
FIL_PAGE_TYPE_BLOB 0x000A BLOB

Page Header

用于记录数据页状态信息,共56字节。

name size description
PAGE_N_DIR_SLOTS 2 Page Directory中的slot数量
PAGE_HEAP_TOP 2 堆中第一条记录的指针
PAGE_N_HEAP 2 堆中的记录数,两个字节表示,第十五位表示格式
PAGE_FREE 2 可重用空间的首指针
PAGE_GRABAGE 2 已删除记录的字节数,delete_flag=1的记录数
PAGE_LAST_INSERT 2 最后插入记录的位置
PAGE_DIRECTION 2 最后插入的方向,可取值
PAGE_LEFT :0x01
PAGE_RIGHT:0x02
PAGE_SAME_REC:0x03
PAGE_SAME_PAGE:0x04
PAGE_NO_DIRECTION:0x05
PAGE_N_DIRECTION 2 一个方向连续插入的记录数量
PAGE_N_RECS 2 该页中记录的数量
PAGE_MAX_TRX_ID 8 修改当前最大的事务ID
PAGE_LEVEL 2 当前页在索引树中的位置,0x00表示叶节点
PAGE_INDEX_ID 8 索引id,表示当前页属于哪个索引
PAGE_DIR_SEG_LEAF 10 B+B^+树中数据页非叶节点所在段的segment header
PAGE_DIR_SEG_TOP 10 B+B^+树数据页所在段的segment header

Infimum和Supremum Record

  • 每个数据页都有两条虚拟行记录
  • 一条最小索引值,一条最大索引值,限定边界
  • 页创建时创建,任何时候都不删除
    在这里插入图片描述

User Record和Free Space

  • B+B^+索引没得洗,一定是
  • User Space实际存储记录
  • Free Space未使用

Page Directory

  • Page Directory索引Solts
  • 每个Solts包含多个页
  • 每个页二叉查找单条记录

File Trailer

完整性检测

  • FIl_PAGE_END_LSN前四个字节为checksum
  • 后四个字节和File HeaderFIL_PAGE_LSN相同

fileheader{FIL_PAGE_SPACE_OR_CHECKSUMFIL_PAGE_END_LSN[0:4]FIL_PAGE_LSNFIL_PAGE_END_LSN[4:8]}fileTrailer file header \left\{ \begin{matrix} & FIL\_PAGE\_SPACE\_OR\_CHECKSUM &\Rightarrow FIL\_PAGE\_END\_LSN[0:4] \\ & FIL\_PAGE\_LSN &\Rightarrow FIL\_PAGE\_END\_LSN[4:8] \end{matrix} \right\} file Trailer

开关

show variables like 'innodb_checksums';

在这里插入图片描述

关闭可降低开销,但是不能保证了。

算法

校验并不是直接进行比较就行了,更多是通过算法进行。

show variables like 'innodb_checksum_algorithm';

在这里插入图片描述
可选设置值为

  • innodb
  • crc32
  • none
  • strict_innodb
  • strict_crc32
  • strict_none

strict_crc32是最快的,推荐使用,但是低版本不支持,需要升级。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!