9.2.3.1 【MySQL】XDES Entry链表

2023-09-21 22:51:18

当段中数据较少的时候,首先会查看表空间中是否有状态为 FREE_FRAG 的区,也就是找还有空闲空间的碎片区,如果找到了,那么从该区中取一些零碎的页把数据插进去;否则到表空间下申请一个状态为 FREE 的区,也就是空闲的区,把该区的状态变为 FREE_FRAG ,然后从该新申请的区中取一些零碎的页把数据插进去。之后不同的段使用零碎页的时候都会从该区中取,直到该区中没有空闲空间,然后该区的状态就变成了FULL_FRAG 。

现在的问题是你怎么知道表空间里的哪些区是 FREE 的,哪些区的状态是 FREE_FRAG 的,哪些区是FULL_FRAG 的?要知道表空间的大小是可以不断增大的,当增长到GB级别的时候,区的数量也就上千了,我们总不能每次都遍历这些区对应的 XDES Entry 结构吧?这时候就是 XDES Entry 中的 List Node 部分发挥奇效的时候了,我们可以通过 List Node 中的指针,做这么三件事:

  • 把状态为 FREE 的区对应的 XDES Entry 结构通过 List Node 来连接成一个链表,这个链表我们就称之为 FREE 链表。
  • 把状态为 FREE_FRAG 的区对应的 XDES Entry 结构通过 List Node 来连接成一个链表,这个链表我们就称之为 FREE_FRAG 链表。
  • 把状态为 FULL_FRAG 的区对应的 XDES Entry 结构通过 List Node 来连接成一个链表,这个链表我们就称之为 FULL_FRAG 链表。

这样每当我们想找一个 FREE_FRAG 状态的区时,就直接把 FREE_FRAG 链表的头节点拿出来,从这个节点中取一些零碎的页来插入数据,当这个节点对应的区用完时,就修改一下这个节点的 State 字段的值,然后从 FREE_FRAG 链表中移到 FULL_FRAG 链表中。同理,如果 FREE_FRAG 链表中一个节点都没有,那么就直接从 FREE 链表中取一个节点移动到 FREE_FRAG 链表的状态,并修改该节点的 STATE 字段值为FREE_FRAG ,然后从这个节点对应的区中获取零碎的页就好了。

当段中数据已经占满了32个零散的页后,就直接申请完整的区来插入数据了。

9.2.3.2 链表基节点

如何找到这些链表,怎么找到某个链表的头节点或者尾节点在表空间中的位置,这就需要List Base Node的结构。这个结构中包含了链表的头节点和尾节点的指针以及这个链表中包含了多少节点的信息,我们画图看一下这个结构的示意图:

我们上边介绍的每个链表都对应这么一个 List Base Node 结构,其中:

  • List Length 表明该链表一共有多少节点。
  • First Node Page Number 和 First Node Offset 表明该链表的头节点在表空间中的位置。
  • Last Node Page Number 和 Last Node Offset 表明该链表的尾节点在表空间中的位置。

一般我们把某个链表对应的 List Base Node 结构放置在表空间中固定的位置,这样想找定位某个链表就容易多了。

9.2.3.3 链表小结

综上所述,表空间是由若干个区组成的,每个区都对应一个 XDES Entry 的结构,直属于表空间的区对应的 XDESEntry 结构可以分成 FREE 、 FREE_FRAG 和 FULL_FRAG 这3个链表;每个段可以附属若干个区,每个段中的区对应的 XDES Entry 结构可以分成 FREE 、 NOT_FULL 和 FULL 这3个链表。每个链表都对应一个 List Base Node 的结构,这个结构里记录了链表的头、尾节点的位置以及该链表中包含的节点数。正是因为这些链表的存在,管理这些区才容易不少。

更多推荐

iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程

文章目录一、环境准备二、基础软件三、扩展:usb拓展插件一、环境准备1、下载VMware虚拟机的壳子,安装并注册软件(可以百度注册码),最新版本:v172、下MacOS系统iOS镜像文件,用于vmware虚拟机安装,当前镜像最新版本:v11.6二、基础软件1、MacOS系统找到AppStore,这点同iphone操作,

.NET的CancellationTokenSource和ManualResetEvent结合使用

一、CancellationTokenSource是C#中的一个类,用于取消异步操作。它提供了一种机制,可以取消一个或多个异步操作。CancellationTokenSource包含以下主要方法:Cancel():该方法会取消所有挂起的操作,并引发OperationCanceledException异常。如果在调用Ca

Linux系统编程6(线程互斥,锁,同步,生产消费模型)

上篇文章介绍完线程的概念后,我们将在这篇文章中初步探讨线程编程以及线程应用中的问题,这篇文章将以抢票系统为例,贯穿整篇文章。笔者将介绍在多线程编程中会出现的问题,什么是同步?什么是互斥?为什么多线程编程常有加锁的概念,什么又是生产者和消费者模型,读完这篇文章,你会得到相应的答案,笔者这里强烈建议各位把文中给出的demo

App Store上线规范及流程

上线一个应用到AppStore需要遵循苹果的规范和流程,以确保应用的质量和安全性。以下是上线应用到AppStore的一般规范和流程,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。1.开发和测试:在上线应用之前,确保应用已经经过了充分的开发和测试阶段。这包括功能测试、性能测试、兼容性

Python学习之——str/unicode/bytes

Python学习之——str/unicode/bytes参考字符串和字节串区分Unicode和Encodingspython2python3一个典型的问题参考Pythonstrvsunicodetypes谈谈python2,3中的str、unicodeUnicode编码及UTF-32,UTF-16和UTF-8https

【Oracle】Oracle系列之二--Oracle数据字典

文章目录往期回顾前言1.什么是Oracle数据字典2.数据字典的内容(1)X$表(2)数据字典表、数据字典视图(3)动态性能视图3.数据字典应用示例(1)查询表的信息(2)查询索引的信息(3)查询用户的信息(4)查询表空间的信息(5)查询数据文件的信息(6)查询数据库的性能数据往期回顾【Oracle】Oracle系列–

【腾讯云 Cloud Studio 实战训练营】快速构建React完成点餐H5页面

一,前言1.1相关链接官网地址:CloudStudio官方文档地址:CloudStudio(云端IDE)简介|CloudStudio1.2CloudStudio(云端IDE)简介CloudStudio是基于浏览器的集成式开发环境(IDE),用户在使用CloudStudio时无需安装,随时随地打开浏览器就能在线编程,给开

React进阶

TODO1组件生命周期React组件生命周期|菜鸟教程(runoob.com)https://www.runoob.com/react/react-component-life-cycle.html什么是组件生命周期在React中,组件生命周期是指组件从创建到销毁期间经历的一系列阶段。在每个阶段,React给予我们不同

vue页面嵌入飞书网页组件,用于在类似ERP,OA等系统中展示在线文档

先展示最终效果(就是在vue页面中,内嵌了一块ifream页面):1.注册进入飞书开放平台,地址为:飞书开放平台2.进入开放平台后,选择--创建企业自建应用--创建网页应用,然后在主页面记住该应用的appId和appSecret参数,后面要用3.然后注意一点的是,因为后面的授权等逻辑我们一般用我们自己的文档做测试,但是

React antd Select 无法在disabled状态下选择并复制输入框内的内容情况分析及解决方案

文章目录背景问题分析解决思路一:会不会是由于在选择框内hover的时候出现的那个图标导致的解决思路二:会不会是这个span禁止复制解决思路三:去看看antd具体实现最终解决方案其他版本的解决方案antd3.*antd5.*背景在React项目开发中,我们经常会用到antd内的Select组件。有时候我们会在disabl

Eureka注册中心

文章目录1.Eureka的结构与作用2.搭建eureka-server服务3.注册service服务4.服务发现1.Eureka的结构与作用在Eureka架构中,微服务角色有两类:lEurekaServer:服务端,注册中心记录服务信息u心跳监控lEurekaClient:客户端Provider:服务提供者注册自己的信

热文推荐