之前有提过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 条评论) “” |