InnoDB数据页结构(1)环境搭建

InnoDB数据页结构

之前有提过Mysql数据库内存空间和磁盘空间交互为了高效一般采用页的形式传输,每个页通常的大小为16kb,页的形式有很多种,但我们最需要了解的是存放业务数据的页简称数据页,下面聊聊数据页的基本结构。

数据页基本结构

数据页的存储空间被划分了多个数据区域,每个部分负责的功能不一样,如下所示

 

一个数据页划分出了7个数据区域,其中部分空间是固定占用空间,如文件头部、页面头部等,长度不确定的代表无法估算具体空间,其实在创建一个新页后,并没有User Records数据区域,每次向数据库中插入一条记录时,数据库会先向Free Space空闲空间申请一块数据区域,然后InnoDB会根据具体的行格式将值放入申请的部分数据区域中也就是User Records,示意图如下

 

了解完页的基本信息后,我们可以为后面的分析搭建一个演示环境,如下所示

测试环境搭建

因为本文分析的是InnoDB的数据页结构,同时为了方便演示我们将表的字符集定义为ascii,编码一个字符只需要一个字节,方便后面的分析

 --- 创建测试表
 mysql> CREATE TABLE page_demo(
     ->     c1 INT,
     ->     c2 INT,
     ->     c3 VARCHAR(10000),
     ->     PRIMARY KEY (c1)
     -> ) CHARSET=ascii ROW_FORMAT=Compact;

在这里需要注意的是page_demo测试表,将列c1指定为主键,这意味着在Compact行格式中的隐藏列row_id将采用c1代替,Compact行格式示意图如下所示

 

在测试表page_demo中插入测试数据

 INSERT INTO page_demo VALUES(1, 100, 'aaaa'), (2, 200, 'bbbb'), (3, 300, 'cccc'), (4, 400, 'dddd');

表记录展示如下

 

表创建后我们可以得到page_demo的ibd文件,具体操作详情可以参考

得到ibd文件后将其转为16进制可读文件

 hexdump -C -v page_demo.ibd > page_demo.txt

到此后续需要用到的环境搭建完毕!

 

posted on   Java面试365  阅读(31)  评论(0编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示