9.2.4 【MySQL】段的结构

段不对应表空间中某一个连续的物理区域,而是一个逻辑上的概念,由若干个零散的页面以及一些完整的区组成。像每个区都有对应的XDES Entry来记录这个区中的属性一样,定义了一个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

每个 Fragment Array Entry 结构都对应着一个零散的页面,这个结构一共4个字节,表示一个零散页面的页号。

9.2.5 各类型页面详细情况

9.2.5.1 FSP_HDR 类型

首先看第一个组的第一个页面,当然也是表空间的第一个页面,页号为 0 。这个页面的类型是 FSP_HDR ,它存储了表空间的一些整体属性以及第一个组内256个区的对应的 XDES Entry 结构,直接看这个类型的页面的示意图:

从图中可以看出,一个完整的 FSP_HDR 类型的页面大致由5个部分组成,各个部分的具体释义如下表:

名称

中文名

占用空间大小

简单描述

file header

文件头部

38字节

页的一些通用信息

file space header

表空间头部

112 字节

表空间的一些整体属性信息

XDES Entry

区描述信息

10240 字节

存储本组256个区对应的属性信息

Empty Space

尚未使用空间

5986 字节

用于页结构的填充,没啥实际意义

File Trailer

文件尾部

8 字节

8 字节

File Space Header部分

下面是各个属性的简单描述:

名称

占用空间大小

描述

Space ID

4字节

表空间的ID

Not Used

4字节

这4个字节未被使用,可以忽略

Size

4字节

当前表空间占有的页面数

FREE Limit

4字节

尚未被初始化的最小页号,大于或等于这个页号的区对应的XDES Entry结构都没有被加入FREE链表

Space Flags

4字节

表空间的一些占用存储空间比较小的属性

FRAG_N_USED

4字节

FREE_FRAG链表中已使用的页面数量

List Base Node for FREE List

16字节

FREE链表的基节点

List Base Node for FREE_FRAGList

16字节

FREE_FREG链表的基节点

List Base Node for FULL_FRAGList

16字节

FULL_FREG链表的基节点

Next Unused Segment ID

16字节

当前表空间中下一个未使用的 Segment ID

List Base Node forSEG_INODES_FULL List

16字节

SEG_INODES_FULL链表的基节点

List Base Node forSEG_INODES_FREE List

16字节

SEG_INODES_FREE链表的基节点

List Base Node for FREE List 、 List Base Node for FREE_FRAG List 、 List Base Node forFULL_FRAG List,这三个分别是直属于表空间的 FREE 链表的基节点、 FREE_FRAG 链表的基节点、FULL_FRAG 链表的基节点,这三个链表的基节点在表空间的位置是固定的,就是在表空间的第一个页面(也就是 FSP_HDR 类型的页面)的 File Space Header 部分。

FRAG_N_USED

这个字段表明在 FREE_FRAG 链表中已经使用的页面数量,方便之后在链表中查找空闲的页面。

FREE Limit

表空间对应着具体的磁盘文件,创建表空间的时候对应的磁盘文件中都没有数据,所以我们需要对表空间完成一个初始化操作,包括为表空间中的区建立 XDES Entry 结构,为各个段建立INODE Entry 结构,建立各种链表等操作。一开始为表空间申请的空间,实际上绝大部分都是空的,我们可以选择吧所有的空闲区,对应的 XDES Entry 结构加入FREE 链表,也可以选择只把一部分的空闲区加入 FREE 链表,等啥时候空闲链表中的 XDES Entry 结构对应的区不够使了,再把之前没有加入 FREE 链表的空闲区对应的 XDES Entry 结构加入 FREE 链表,中心思想就是啥时候用到啥时候初始化,为表空间定义了 FREE Limit 这个字段,在该字段表示的页号之前的区都被初始化了,之后的区尚未被初始化。

Next Unused Segment ID

表中每个索引都对应2个段,每个段都有一个唯一的ID,那当我们为某个表新创建一个索引的时候,就意味着要创建两个新的段。 NextUnused Segment ID 的字段,该字段表明当前表空间中最大的段ID的下一个ID,这样在创建新段的时候赋予新段一个唯一的ID值就直接使用这个字段的值就好。

Space Flags

表空间对于一些布尔类型的属性,只需要几个比特位搞定的属性都放在这个Space Flags中存储,虽然它只有4个字节,32个比特位大小,却存储了好多表空间的属性,详细情况如下表:

|标志名称|占用的空间(单位:bit)|描述| |:--:|:--:|:--:| | POST_ANTELOPE |1|表示文件格式是否大于 ANTELOPE || ZIP_SSIZE |4|表示压缩页面的大小| | ATOMIC_BLOBS |1|表示是否自动把值非常长的字段放到BLOB页里|| PAGE_SSIZE |4|页面大小| | DATA_DIR |1|表示表空间是否是从默认的数据目录中获取的| | SHARED |1|是否为共享表空间| | TEMPORARY |1|是否为临时表空间| | ENCRYPTION |1|表空间是否加密| | UNUSED |18|没有使用到的比特位|

List Base Node for SEG_INODES_FULL List 和 List Base Node for SEG_INODES_FREE List

每个段对应的 INODE Entry 结构会集中存放到一个类型位 INODE 的页中,如果表空间中的段特别多,则会有多个 INODE Entry 结构,可能一个页放不下,这些 INODE 类型的页会组成两种列表:

  • SEG_INODES_FULL 链表,该链表中的 INODE 类型的页面都已经被 INODE Entry 结构填充满了,没空闲空间存放额外的 INODE Entry 了。
  • SEG_INODES_FREE 链表,该链表中的 INODE 类型的页面都已经仍有空闲空间来存放 INODE Entry 结构。

XDES Entry部分

XDESEntry 就是在表空间的第一个页面中保存的。我们知道一个 XDES Entry 结构的大小是40字节,但是一个页面的大小有限,只能存放有限个 XDES Entry 结构,所以我们才把256个区划分成一组,在每组的第一个页面中存放256个 XDES Entry 结构。大家回看那个 FSP_HDR 类型页面的示意图, XDES Entry 0 就对应着 extent 0 , XDESEntry 1 就对应着 extent 1 ... 依此类推, XDES Entry255 就对应着 extent 255 。

每个区对应的XDES Entry结构的地址都是固定的。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA自动化之Junit单元测试框架详解

一、JUnit概述&配置 1、Junit是什么&#xff1f; Junit是一个Java 编程语言的开源测试框架&#xff0c;用于编写和运行测试。官网 地址&#xff1a;https://junit.org/junit4/ 2、Maven配置 ?xml version"1.0" encoding"UTF-8"?> <project…

【大数据存储与处理】1. hadoop单机伪分布安装和集群安装

0. 写在前面 0.1 软件版本 hadoop2.10.2 ubuntu20.04 openjdk-8-jdk 0.2 hadoop介绍 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个…

pip install open-interpreter报错,无法安装

标题pip install open-interpreter报错&#xff0c;无法安装 ERROR: Could not find a version that satisfies the requirement open-interpreter (from versions: none) ERROR: No matching distribution found for open-interpreter 另外发现自己换了很多国内镜像源&#x…

【LeetCode热题100】--54.螺旋矩阵

54.螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 按层遍历 可以将矩阵看成若干层&#xff0c;首先输出最外层的元素&#xff0c;其次输出次外层的元素&#xff0c;直到输出最内层的元素。 对于每层&…

CockroachDB集群部署

CockroachDB集群部署 1、CockroachDB简介 CockroachDB(有时简称为CRDB)是一个免费的、开源的分布式 SQL 数据库&#xff0c;它建立在一个事务性和强一致性的键 值存储之上。它由 PebbleDB(一个受 RocksDB/leveldb 启发的 K/B 存储库)支持&#xff0c;并使用 Raft 分布式共识…

JS进阶-函数剩余参数

函数参数的使用细节&#xff0c;能够提升函数应用的灵活度。 动态参数 arguments是函数内部内置的伪数组变量&#xff0c;它包含了调用函数时传入的所有实参&#xff0c;只存在于函数里 function getSum() {let sum 0for (let i 0; i < arguments.length; i) {sum arg…

性能测试之使用Jemeter对HTTP接口压测

我们不应该仅仅局限于某一种工具&#xff0c;性能测试能使用的工具非常多&#xff0c;选择适合的就是最好的。笔者已经使用Loadrunner进行多年的项目性能测试实战经验&#xff0c;也算略有小成&#xff0c;任何性能测试&#xff08;如压力测试、负载测试、疲劳强度测试等&#…

9.19数电——触发器状态机第四周作业题解计数器(部分)

触发器 RS 1.输出置0 2.置1 3.输出保持不变 S&#xff1a;是置位信号&#xff0c;为1时说要置为1&#xff1b;为0时要置为0&#xff1b; R&#xff1a;是复位信号&#xff0c;为1时就要无条件置为0&#xff0c;为0时保持寄存器原状态 如果要置为0&#xff0c;必要条件…

uniapp——实现base64格式二维码图片生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.base64生成…

卤制品配送经营商城小程序的用处是什么

卤制品也是食品领域重要的分支&#xff0c;尤其对年轻人来说&#xff0c;只要干净卫生好吃价格合理&#xff0c;那复购率宣传性自是不用说&#xff0c;而随着互联网发展&#xff0c;传统线下门店也须要通过线上破解难题或进一步扩大生意。 而商城小程序无疑是商家通过线上私域…

2023-9-26 JZ 复杂链表的复制

题目链接&#xff1a;复杂链表的复制 import java.util.*; /* public class RandomListNode {int label;RandomListNode next null;RandomListNode random null;RandomListNode(int label) {this.label label;} } */ public class Solution {public RandomListNode Clone(Ra…

Docker 容器编排

是什么 Docker-Compose是 Docker 官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Compose 是 Docker 公司推出的一个工具软件&#xff0c;可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml&#xff0c;写好多个…

【Java 基础篇】Java JUnit 使用详解

JUnit是一个用于编写和运行单元测试的Java框架。它是开发高质量、可维护和可扩展的Java应用程序的关键工具之一。本文将详细介绍JUnit的使用&#xff0c;包括JUnit的安装、基本用法、常见注解、测试套件、参数化测试等内容。 什么是单元测试&#xff1f; 在深入JUnit之前&…

【深度学习实验】卷积神经网络(二):自定义简单的二维卷积神经网络

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 二维互相关运算&#xff08;corr2d&#xff09; 2. 二维卷积层类&#xff08;Conv2D&#xff09; a. __init__&#xff08;初始化&#xff09; b. forward(前向传…

web浏览器公网远程访问jupyter notebook【内网穿透】

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#xff0c;如…

【数据结构-树】哈夫曼树

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

【算法思想-排序】根据另一个数组次序排序 - 力扣 1122 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

超越代写!5步教你轻松利用ChatGPT创作文本

任何尝试用 ChatGPT 写过“写一篇关于【主题】的文章”的人都知道一个真相&#xff1a; ChatGPT 根本写不好&#xff0c;这不是秘密。如果你怀疑我&#xff0c;试试用它或者任何 AI 写作工具去写一篇博客文章&#xff0c;结果它都会写出非常糟糕的、没人会想看的内容。 但是我…

springboot基于SpringBoot的冬奥会科普平台springboot21

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

基于微信小程序的动漫论坛平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…