InnoDB数据页结构(1)环境搭建
之前有提过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文件,具体操作详情可以参考
[InnoDB存储引擎行结构环境搭建] https://mp.weixin.qq.com/s/mHppbLl5rp25OdNrXT8G5Q
得到ibd文件后将其转为16进制可读文件
hexdump -C -v page_demo.ibd > page_demo.txt
到此后续需要用到的环境搭建完毕!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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的设计差异
· 三行代码完成国际化适配,妙~啊~