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文件,具体操作详情可以参考InnoDB存储引擎行结构环境搭建

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

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

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

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章