• 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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里需要注意的是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');
    
    • 1

    表记录展示如下

    表创建后我们可以得到page_demo的ibd文件,具体操作详情可以参考InnoDB存储引擎行结构环境搭建

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

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

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

  • 相关阅读:
    redis 的java客户端 基础(一)
    线性空间的定义与性质
    STM32 CAN使用记录:FDCAN基础通讯
    【SCAU数据挖掘】数据挖掘期末总复习题库判断题及解析
    【元宇宙】管理元宇宙,以最好的方式引导它
    微信如何实现自动转发朋友圈(跟圈)?
    以太坊智能合约的技术与组件
    洛谷P4560 Wall 砖墙
    Linux之V4L2驱动框架
    C#向RichTextbox中复制内容时去除源文本格式
  • 原文地址:https://blog.csdn.net/zzf1233/article/details/126253659