InnoDB数据页结构

来源:互联网 发布:叶子正品软件 编辑:程序博客网 时间:2024/06/06 03:57

页是InnoDB存储引擎管理数据库的最小磁盘单位;
页类型为B-tree node的页,存放的即是表中行的实际数据。

InnoDB数据页

  • File Header(文件头)
  • Page Header(页头)
  • Infimum +Supermum Records
  • User Records(用户记录,即行记录)
  • Free Space(空闲空间)
  • Page Directory(页目录)
  • File Trailer(文件结尾信息)
  • 其中File Header 、Page Header、File Trailer的大小是固定的,用来表示该页的一些信息,如Checksum、数据所在的索引层。

    File Header

    由8个部分组成,共38个字节

    名称大小FIL_PAGE_SPACE_OR_CHECKSUM4FIL_PAGE_OFFSET4FIL_PAGE_PREV4FIL_PAGE_NEXT4FIL_PAGE_LSN8FIL_PAGE_TYPE2FIL_PAGE_FILE_FLUSH_LSN8FIL_PAGE_ARCH_LOG_NO_SPACE_ID4

  • FIL_PAGE_SPACE_OR_CHECKSUM
  • 代表了页的checksum值;
  • FIL_PAGE_OFFSET
  • 表空间中页的偏移值;
  • FIL_PAGE_PREV
  • 当前页的上一个页;
  • FIL_PAGE_NEXT
  • 当前页的下一个页;
    B+Tree特性决定叶子节点必须是双向列表
  • FIL_PAGE_LSN
  • 该值代表了该页最后被修改的日志序列位置LSN(Log Sequence Number)
  • FIL_PAGE_TYPE
  • 页的类型:

    名称十六进制解释FIL_PAGE_INDEX0x45BFB+树叶子节点FIL_PAGE_UNDO_LOG0x0002Undo Log页FIL_PAGE_INODE0x0003索引节点FIL_PAGE_IBUF_FREE_LIST0x0004Insert Buffer空闲列表FIL_PAGE_TYPE_ALLOCATED0x0000该页为最新分配FIL_PAGE_IBUF_BITMAP0x0005Insert Buffer位图FIL_PAGE_TYPE_SYS0x0006系统页FIL_PAGE_TYPE_TRX_SYS0x0007事务系统数据FIL_PAGE_FSP_HDR0x0008File Space HeaderFIL_PAGE_TYPE_XDES0x0009扩展描述符FIL_PAGE_TYPE_BLOB0x000ABLOB页

  • FIL_PAGE_FILE_FLUSH_LSN
  • 该值仅在数据文件中的一个页中定义,代表文件至少被更新到了该LSN值
  • FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID
  • 该值仅在数据文件中的一个页中定义,代表文件至少被更新到了该LSN值;

    记录数据页的状态信息,由14个部分组成,共56个字节

    名称大小PAGE_N_DIR_SLOTS2PAGE_HEAP_TOP2PAGE_N_HEAP2PAGE_FREE2PAGE_GARBAGE2PAGE_LAST_INSERT2PAGE_DIRECTION2PAGE_N_RECS2PAGE_MAX_TRX_ID8PAGE_LEVEL2PAGE_INDEX_ID8PAGE_BTR_SEG_LEAF10PAGE_BTR_SEG_TOP10

    Page Directory

    页目录存放了记录的相对位置(存放的是页的相对位置,而不是偏移量),有些时候这些记录指针称为slot(槽)或者目录槽(Directory Slots)。InnoDB存储引擎的槽是一个稀疏目录,即一个槽中可能属于多个记录,最少属于4条,最多属于8条记录。
    Slot中记录按照键的顺序存放,这样可以利用二叉查找迅速找到记录的指针。
    B+树本身不能找到具体的一条记录,B+树索引能够找到只是该记录所在的页。数据库把页载入到内存,然后通过Page Diectory再进行二叉查找。

    File Trailer

    为了保证页能完整写入磁盘,InnoDB存储引擎页中设置了File Trailer部分。File Trailer只有一个FIL_PAGE_END_LSN部分,占用8个字节。前4个字节代表该页的checksum值,最后4个字节和File Header中的FIL_PAGE_LSN相同。通过这两个值来和File Header中的FIL_PAGE_SPACE_OR_CHKSUM和

    原创粉丝点击