Mysql 学习(七)独立表结构存储 二

news2024/11/19 15:25:52

段的结构

  • 上一节说过表空间分为各个段,每个段里面又是以区为单位,每个区则有64个页。区根据剩余存储空间分为:Free,FREE_FRAG,FULL_FRAG 三种类型,为了方便管理区,给每个区创建XDES Entry结构,然后给这三种类型创建三个对应的XDES Entry结构链表。
  • 像每个区都有对应的XDES Entry来记录这个区中的属性一样,设计InnoDB的大佬为每个段都定义了一个INODE Entry结构来记录一下段中的属性,如下图:
    在这里插入图片描述
  • Segment ID:就是指这个INODE Entry结构对应的段的编号(ID)
  • NOT_FULL_N_USED:这个字段指的是在NOT_FULL链表中已经使用了多少个页。下次从NOT_FULL链表分配空闲页时可以直接根据这个字段的值定位到。而不用从链表中的第一个页开始遍历着寻找空闲页。
  • List Base Node:分别为段的FREE链表、NOT_FULL链表、FULL链表定义了List Base Node,这样我们想查找某个段的某个链表的头节点和尾节点的时候,就可以直接到这个部分找到对应链表的List Base Node
  • Magic Number: 这个值是用来标记这个INODE Entry是否已经被初始化了(初始化的意思就是把各个字段的值都填进去了)。如果这个数字是值的97937874,表明该INODE Entry已经初始化,否则没有被初始化。
  • Fragment Array Entry:对应着一个零散的页,这个结构一共4个字节,表示一个零散页的页号。

各类型页详细情况

  • 上一节我们只是粗略的讲解了各个页的介绍,下面我们就来讲讲为什么会有这些页
    在这里插入图片描述

FSP_HDR类型

  • 首先我们先来看看第一组的第一个页,页号为0,由上面可以知道这个页的类型是 FSP_HDR类型
  • FSP_HDR类型 主要存储的试表空间的一些整体属性和第一个组的 0- 256 个区对应的 XDES Entry 结构,下图是他们的结构:
    在这里插入图片描述
    • File Header:文件头部,主要是页的一些通用信息
    • File Space Header:表空间头部,表空间的一些整体属性信息
    • XDES Entry:区的描述信息,存储本组256个区的属性信息
      • 一个XDES Entry结构的大小是40字节,但是一个页的大小有限,只能存放有限个XDES Entry结构,所以我们才把256个区划分成一组,在每组的第一个页中存放256个XDES Entry结构。
    • Empty Space:结构填充无实际意义
    • File Trailer:校验页是否完整
  • 像 File Header ,File Trailer,Empty Space 这些我们之前都讲过我们就不再次重复了,这里我们主要讲解 File Space Header 这个部分

File Space Header

  • 这个部分主要作用是存储表空间的一些整体属性,如下图:
    在这里插入图片描述
    • Space ID:
      • 占用4字节
      • 表空间的ID
    • Size:
      • 占用4个字节
      • 当前表空间占有的页数
    • FREE Limit:
      • 占用4个字节
      • 尚未被初始化的最小页号,大于或等于这个页号的区对应的XDES Entry结构都没有被加入FREE链表
    • Space Flags:
      • 占用4个字节
      • 表空间的一些占用存储空间比较小的属性,主要是一些布尔类型的属性:
        • POST_ANTELOPE:占用1bit 表示文件格式是否大于ANTELOPE
        • ZIP_SSIZE:占用4bit 表示压缩页的大小
        • ATOMIC_BLOBS:占用1bit 表示是否自动把值非常长的字段放到BLOB页里
        • PAGE_SSIZE:占用4bit 页大小
        • DATA_DIR:占用1bit 表示表空间是否是从默认的数据目录中获取的
        • SHARED:占用1bit 是否为共享表空间
        • TEMPORARY:占用1bit 是否为临时表空间
        • ENCRYPTION:占用1bit 表空间是否加密
        • UNUSED:占用18bit 没有使用到的比特位
    • FRAG_N_USED:
      • 占用4个字节
      • FREE_FRAG链表中已使用的页数量,方便之后在链表中查找空闲的页
    • Space Flags:
      • 占用4个字节
      • 表空间的一些占用存储空间比较小的属性
    • List Base Node for FREE List:
      • 占用16个字节
      • FREE链表的基节点,方便定位到对应的 Free链表
    • List Base Node for FREE_FRAG List:
      • 占用16个字节
      • FREE_FREG链表的基节点,方便定位到对应的 FREE_FREG链表
    • List Base Node for FULL_FRAG List:
      • 占用16个字节
      • FULL_FREG链表的基节点,方便定位到对应的 FULL_FREG链表
    • Next Unused Segment ID:
      • 占用8个字节
      • 当前表空间中下一个未使用的 Segment ID
      • 表中每个索引都有两个段,一个段用来存储非叶子节点,一个段用来存储叶子节点,每个段都有自己独一无二的段号,每当创建新的索引时,就需要创建段号,但是为了保证段号唯一且不用再遍历一次,所以这个字段就会存储下一个新建的段号,每次都从这里取就可以了
    • List Base Node for SEG_INODES_FULL List:
      • 占用16个字节
      • SEG_INODES_FULL链表的基节点
        • 该链表中的INODE类型的页都已经被INODE Entry结构填充满了,没空闲空间存放额外的INODE Entry了。
    • List Base Node for SEG_INODES_FREE List:
      • 占用16个字节
      • SEG_INODES_FREE链表的基节点
        • 该链表中的INODE类型的页都已经仍有空闲空间来存放INODE Entry结构。

XDES类型

  • 每一个XDES Entry结构对应表空间的一个区,虽然一个XDES Entry结构只占用40字节,但是表空间的区数量很多,所以你不可能一个页就把所有的结构存储起来,所以想了个办法,在每个分组第一页放入这个分组256个区的XDES Entry结构,加起来也就是10240字节,妥妥的够用,结果如下图:
    在这里插入图片描述
  • 这里你会发现跟FSP_HDR类型很相似,因为XDES类型不是第一个页,所以不用存储表空间的相关属性,所以除了那些之外都是一样的

IBUF_BITMAP类型

  • 记录了跟Change Buffer相关概念,后面再说,比较重要

INODE类型

  • 看到这个名字,大家应该会想起来之前讲的INODE Entry结构,这个结构是跟段有关,老生常谈,每创建一个索引,就会创建两个段,为了方便管理每个段都会有INODE Entry结构,而这个类型的页就是为了存储INODE Entry结构存在的,结构如下图:
    在这里插入图片描述
    • File Header:文件头部 38字节 页的一些通用信息
    • List Node for INODE Page List :通用链表节点 12字节 存储上一个INODE页和下一个INODE页的指针,因为可能一个INODE类型的页不足以存储所有的段对应的INODE Entry结构,所以就需要额外的INODE类型的页来存储这些结构。还是为了方便管理这些INODE类型的页,设计InnoDB的大佬们将这些INODE类型的页串联成两个不同的链表SEG_INODES_FULL链表 和 SEG_INODES_FREE链表,这两个结构在 FSP_HDR类型 页 的 File Space Header 中,所以我们可以说一下创建一个段的过程:
      • 创建一个INODE Entry结构与之对应
      • 先看看SEG_INODES_FREE链表是否为空,如果不为空,直接从该链表中获取一个节点,也就相当于获取到一个仍有空闲空间的INODE类型的页,然后把该INODE Entry结构防到该页中。当该页中无剩余空间时,就把该页放到SEG_INODES_FULL链表中。
      • 如果SEG_INODES_FREE链表为空,则需要从表空间的FREE_FRAG链表中申请一个页,修改该页的类型为INODE,把该页放到SEG_INODES_FREE链表中,与此同时把该INODE Entry结构放入该页。
    • INODE Entry:段描述信息 16128字节 每个INODE Entry结构占用192字节,一个页里可以存储85个这样的结构。
    • Empty Space:尚未使用空间 6字节 用于页结构的填充,没什么实际意义
    • File Trailer:文件尾部 8字节 校验页是否完整

Segment Header 结构的运用

  • 一个索引对应两个段,一个段存储的是非叶子节点,一个段存储的是叶子节点,每个段都会对应一个INODE ENTRY结构,但是我们怎么知道 那个段对应哪个 INODE ENTRY 结构呢?
  • 这个时候就需要有一个结构去对应这些信息,就是 Segment Header 结构
    在这里插入图片描述
    • Space ID of the INODE Entry :占用4字节 INODE Entry结构所在的表空间ID
    • Page Number of the INODE Entry :占用4字节 INODE Entry结构所在的页页号
    • Byte Offset of the INODE Ent:占用2字节 INODE Entry结构在该页中的偏移量
  • 有了这个结构就号定位了,不知道还记不记得,当页的类型是INDEX 也就是索引的时候,页会有一个PAGE HEADER部分,里面有两个字段:
    • PAGE_BTR_SEG_LEAF:占用10字节 B+树叶子段的头部信息,仅在B+树的根页定义
    • PAGE_BTR_SEG_TOP:占用10字节 B+树非叶子段的头部信息,仅在B+树的根页定义
  • 这两个字段就是存储上面说的 Segment Header 结构,这样我们就能知道这个页是属于哪个段的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【校招VIP】用户反驳:你说大厂校招不会问框架实战,现在就有问的了,打脸了吧?一看是专业技能给自己挖的坑

最近有个用户过来质疑,不是说大厂不考框架的使用吗? 但网上的这两份面经里,却问到关于SpringBoot的问题。 接着发来了相对应的简历,一看,直接真相大白: 他在专业技能这栏写了:我熟练掌握Sprin…

flink内存参数配置学习

直接上官网 配置 JobManager 内存 | Apache Flink配置 JobManager 内存 # JobManager 是 Flink 集群的控制单元。 它由三种不同的组件组成:ResourceManager、Dispatcher 和每个正在运行作业的 JobMaster。 本篇文档将介绍 JobManager 内存在整体上以及细粒度…

自动驾驶中地图匹配定位技术总结

引言 汽车定位是让自动驾驶汽车知道自身确切位置的技术,在自动驾驶系统中担负着相当重要的职责。汽车定位涉及多种传感器类型和相关技术,主要可分为卫星定位、惯性导航定位、地图匹配定位以及多传感器融合定位几大类。其中地图匹配定位技术利用道路物理…

CSS绝对定位、相对定位

目录 静态定位 - static 相对定位 - relative 绝对定位 - absolute 固定定位 - fixed z-index属性: 在CSS中定位有以下4种: 静态定位 - static相对定位 - relative绝对定位 - absolute 固定定位 - fixed 静态定位 - static 静态定位是css中的默认定…

网络机顶盒哪个牌子好?资深数码粉分享网络电视机顶盒排名

智能电视配置跟不上经常死机卡顿,但显示正常的情况下不想花钱换电视机怎么办?一台网络机顶盒就可以解决你的烦恼,安装上网络机顶盒以后就可以让旧电视新生,那么你知道网络机顶盒哪个牌子好吗?如果不懂这行,…

【自然语言处理 | Transformer】Transformer:Attention is All You Need论文讲解

Transformer由论文《Attention is All You Need》提出: 论文地址为: https://arxiv.org/pdf/1706.03762.pdf文章目录 一、Transformer 整体结构二、Transformer 的输入2.1 单词 Embedding2.2 位置 Embedding 三、Self-Attention(自注意力机制…

.net7 通过 JsonTranscoding 实现 gRPC 与 Web API 一鱼两吃

目标 在一个网站内,用一套proto即提供gPRC 调用,又提供 Web API 调用。 实现方法 根据微软官方James Newton King(Newtonsoft.json 作者)的文章,.net7 里面提供了 JsonTranscoding 特性,只需要三步&#x…

听我一句劝,别去外包,干了6年,废了....

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了6年的功能测试&…

NANK OE骨传导开放式蓝牙耳机发布,极致体验拉满!

近日,中国专业音频品牌NANK南卡发布了全新一代——骨传导开放式蓝牙耳机NANK OE,耳机采用了传统真无线和骨传导的结合方式,带来更加舒适的佩戴体验和音质升级,同时还支持单双耳自由切换,全新的设计收获了市场的喜爱和认…

SignOff Criteria——POCV(Parametric OCV) introduction

文章目录 1. O v e r v i e w Overview Overview2. P O C V A n a l y s i s POCV\ Analysis POCV Analysis3. P O C V F l o w POCV\ Flow POCV Flow4. P O C V R e p o r t POCV\ Report POCV Report 1. O v e r v i e w Overview Overview P r o c e s s v a r i a t i…

数据发送流程

在发送模式下,UART 的串行数据发送电路主要包括一个发送移位寄存器(TSR),TSR 功能是将数据 逐个移位送出。待发数据必须先写到发送缓冲区中。 TXIFx 是发送中断标志位,可配置为发送缓冲区空或TSR 空。 数据的发送支持7bit 、8bit 或9bit 数据…

JavaScript原型链污染学习记录

1.JS原型和继承机制 0> 原型及其搜索机制 NodeJS原型机制,比较官方的定义: 我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个指针,指向一个对象, 而这个对象的用途是包含可…

为什么用Selenium做自动化测试,你真的知道吗?

目录 手工测试的问题 为什么用自动化 选择合适的测试方式 什么时候引入自动化测试 以Jmeter为代表的测试工具 编程能力既重要又不重要 为什么是Selenium 没有最好的技术,只有合适的技术 web自动化测试效率不高 手工测试的问题 手工操作点点点借助的是人脑的…

知识变现海哥|这3种课程定价最容易爆单

这3种课程定价最容易爆单 一门课怎么才能卖到100万,定价很关键。我卖了160万的课,总结了3种课程定价,组合起来最容易爆单!引流课定价0、1、9.9、19.9一般讲3天结束,用低价吸引大量潜在学员 信任课定价99、699、999等…

C++—非递归【循环】遍历二叉树(前序,中序,后序)思路讲解+代码实现

非递归遍历二叉树 前序中序后序 接下来我们在研究如何使用循环实现遍历二叉树时,以下面的二叉树为例: 在下文的讲解中,不对如何构建这颗二叉树做讲解,直接给出代码,如果有不懂的地方欢迎私信我。 文章中的完整源代码链…

一篇文章搞定《Android内存泄漏》

------《Android内存泄漏》 什么是内存泄漏常见的内存泄漏以及规避方式单例模式引用Activity非静态内部类注册的反注册定时器TimerWebView的内存泄漏资源未关闭属性动画 怎么定位内存泄漏LeakCanary接入:使用:检测: Android Proflier开始检测…

Linux驱动编程(分层分离编程思想)

1、面向对象 ⚫ 字符设备驱动程序抽象出一个 file_operations 结构体; ⚫ 我们写的程序针对硬件部分抽象出 led_operations 结构体。 2、分层 上层实现硬件无关的操作,比如注册字符设备驱动:leddrv.c 下层实现硬件相关的操作,比如…

【R语言】鉴于计算10亿以内训练模型记录for循环的加速

文章目录 1 前言2 几个循环2.1 100以内的和2.2 100以内奇数和/偶数和 3 多重循环3.1 向量化3.2 合并循环3.3 apply函数3.4 矩阵运算3.5 foreach分解任务 4 讨论 1 前言 笔者主力机是MBAM1芯片(8256),某个下午巩固循环突然思考到个问题&#…

App违反Google数据安全政策,解决方案

前言 google隐私政策阶段性会进行更新,时长关注隐私政策变化,避免app被强制下架,影响后续运营工作。 邮件内容 摘录邮件详情 我们在以下区域发现了问题: SPLIT_BUNDLE 2:政策声明,数据安全部分:“https:…

中国社科院与美国杜兰大学金融管理硕士项目,引领你走在金融行业前沿

作为金融领域从业人员时刻都在关注行业最新资讯,只有掌握一手的前沿讯息,才能在职场上无往不胜。针对在职的你,如何利用业余时间让自己更增值呢,中国社科院与美国杜兰大学金融管理硕士项目引领你走在金融行业前沿。 金融管理硕士…