• [Mysql] 页结构


    什么是页?

    • 页是InnoDB中管理数据的最小单元
    • 页与页之间是通过一个双向链表连接起来。

    页的组成

    FileHeader


    img

    • 上一页下一页的指针
      • FIL_PAGE_PREV
      • FIL_PAGE_NEXT
    PageHeader

    Infimum & Supremum Records

    会记录当前页最大最小记录

    User Records

    随着系统运行,数据产生,User Records 中的数据会不断的膨胀,相应的 Free Space 空间会慢慢的变小。

    • 按照插入顺序来排队的,先到的数据在前面,后来的数据在后面
    • User Records 中的行数据之间的单链表形成了一个按照 Primary Key排列的顺序。
    Free Space

    Free Space 没空间了,则说明需要申请新的页了

    Page Directory

    MySQL 会在新增数据的时候就将对应的 Slot 创建好,有了 Page Directory ,就可以对一张页的数据进行粗略的二分查找。至于为什么是粗略,毕竟 Page Directory 中不是完整的数据,二分查找出来的结果只能是个大概的位置,找到了这个大概的位置之后,还需要回到 User Records 中继续的进行挨个遍历匹配。

    File Trailer

    这块主要是为了防止页在刷入磁盘的过程中,由于极端的意外情况(网络问题、火灾、自然灾害)导致失败,而造成数据不一致的情况,也就是说形成了脏页。
    File Trailer

    一页能存储多少数据

    页的默认大小为16kb,假设主键 ID 为 bigint 类型,长度为 8 字节,而指针大小在 InnoDB 源码中设置为 6 字节,这样一共 14 字节,我们一个页中能存放多少这样的单元,其实就代表有多少指针,即 16384/14=1170。所以我们每个非叶子结点最多有1170个子节点。
    那么可以算出一棵高度为 2 的 B+ 树,能存放 117016=18720 条这样的数据记录。
    根据同样的原理我们可以算出 一个高度为 3 的 B+ 树可以存放: 1170
    1170*16=21902400 (2100万)条这样的记录。

  • 相关阅读:
    nginx启动,停止,重启
    获取节点与属性
    修改节点的属性 节点默认不允许修改
    删除节点与属性
    创建属性Attribute
    新增节点NewBook并增加属性Name="WPF"
    创建xml树
    HashTable Queue Stack SortedList BitArray
    ArrayList详细
    sqlserver 优化
  • 原文地址:https://www.cnblogs.com/gustavo/p/2a00b699f466ebcea72e9164723cbc20.html
Copyright © 2020-2023  润新知