• mysql-innodb-页结构-索引页


     innodb数据页的空间被分成了7部分

     记录头:

      delete_mask表示当前记录是否被删除,被删掉的记录不会立马清除,next_record会把被删掉的记录组成一个垃圾链表,以备重用这部分数据

      min_rec_mask b+树每层非叶子节点的最小记录都会添加该标记

      n_owned 记录分组中有多少条记录

      heap_no 表示当前记录在本页中的位置 mysql默认会添加两条伪记录,一个代表最大记录一个代表最小记录

      record_type 0普通记录 1 b+树非叶子节点记录 2最小记录 3最大记录

      next_record 当前记录的真实数据到下条记录的真实数据的地址偏移量 最小记录是第一个 最大记录是最后一个,注意nextRecoed在真实数据与记录头信息之间

     页目录page directory

      1. 将未删除的记录分组

      2. 每组的最后一条记录的n_owned记录本组记录数

      3. 每组最后一条记录的偏移量存入page directory

    规定: 最小记录所在组只能有7条记录 最大记录所在组至多7条,剩下的分组至多8条记录

      示例: 

        1. 初始情况下只有最大记录与最小记录 两个组

        2. 插入数据从page directory中查找大于插入主键 并且与插入主键差值最小的组 放入记录,并把该槽位的n_owned+1

        3. 当组中n_owned等于8,再插入时 把9条数据分成两个组,page directory中新增一个槽存储 新增组最大主键的偏移值

    页面头部page header

      page header记录这页的状态信息 记录有多少记录有多少槽等

      1. PAGE_N_DIR_SLOTS  页目录中槽

      2. PAGE_HEAP_TOP 还未使用的空间最小地址该地址之后就是free space

      3. PAGE_N_HEAP  本页中记录的数量 (最大最小记录+被删除的记录+正常记录)

      4. PAGE_FREE   第一个已经标记为删除的记录的地址

      5. PAGE_GARBAGE 已删除记录占用的字节数

      6. PAGE_LAST_INSERT  最后插入记录的位置

      7. PAGE_DIRECTION  记录插入方向 新增主键大于之前的主键page direction 向右

      8. PAGE_N_DIRECTION 一个方向连续插入的记录数量
      9. PAGE_N_RECS 页中记录的数量(不包含被删除记录和最大最小记录)
      10. PAGE_MAX_TRX_ID
      11. PAGE_LEVEL 当前页在b+树中所处的层级
      12. PAGE_INDEX_ID 索引id 表示当前页属于哪个索引
      13. PAGE_BTR_SEG_LEAF
      14. PAGE_BTR_SEG_TOP 

     文件头部 file header

      1. FIL_PAGE_SPACE_OR_CHKSUM   页的校验和 对于较长的值通过某种算法计算出较短的值 这个比较短的值就是校验和

      2. FIL_PAGE_OFFSET  页号 

      3. FIL_PAGE_PREV 上一个页页号 与filepagenext组成双向链表 并不是所有类型的页都有这两个数据
      4. FIL_PAGE_NEXT  下一个页页号
      5. FIL_PAGE_LSN  日志被最后修改时对应的⽇志序列位置
      6. FIL_PAGE_TYPE 页类型
      7. FIL_PAGE_FILE_FLUSH_LSN
      8. FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID 页属于哪个表空间
     file trailer
      
      记录页的校验和与file header中的校验和一致,修改之后,当从内存同步数据到磁盘的过程中file header中的校验和是最新计算的,同步时出现问题 因为fileheader会先同步到磁盘中,还未同步file trailer的校验和 这时两个校验和不一致 意味着数据同步出错
      前4个字节代表也的校验和
      后4个字节被修改时对应的日志序列位置
  • 相关阅读:
    HTTP报文详解
    常用的HTTP协议
    URL详解
    一起切磋
    emacs使用指南
    SSH自动部署
    linux上应用随机启动
    让Maven正确处理javac警告
    最近的学习
    Java application 性能分析分享
  • 原文地址:https://www.cnblogs.com/isnotnull/p/14331778.html
Copyright © 2020-2023  润新知