首页 > 数据库 >MySQL存储引擎-InnoDB数据页

MySQL存储引擎-InnoDB数据页

时间:2024-02-06 17:15:42浏览次数:27  
标签:存储 01 00 InnoDB MySQL 64 80 79

MySQL存储引擎-InnoDB数据页

MySQL一个数据页默认16kb,MySQL为了不同目的涉及了很多类型的数据页,如undo页、Change Buffer页等等。我们这里只关心存放数据的页,即索引(INDEX)页。一个数据页的存储空间大致被划分为7部分,分别为:

1、FIle Header  文件头  38字节

2、Page Header 页面头  56字节

3、Infimum + Supermum  页面中的最小记录和最大记录   26字节

4、User Records  用户记录 不确定

5、Free Space  空闲空间  不确定

6、Page Directory  页目录  不确定

7、File Trailer  文件尾   8字节

一、记录在页中的存储

在一个新生成的页中,没有User Records部分,每有记录插入,都会从Free Space部分申请一个记录大小,然后划分到User Records部分。当Free Space空间用完后,再有记录插入就需要申请新的页了。我们这里再创建一个示例表:

create table page_demo(
  c1 int,
  c2 int,
  c3 varchar(10000),
  primary key(c1)
) charset = ascii row_format = compact;
insert into page_demo values(1,100,'aaaa'),(2,200,'bbbb'),(3,300,'cccc'),(4,400,'dddd');

这里我们使用 hexdump 命令来查看一下数据的存储格式。

我们使用表格和十进制数据来分析一下每行记录是怎么表示的。 因为该示例表有主键,因此没有隐藏列 rowid。注:int类型占4个字节。 保留个疑问,我们可以看到c2列就是 100、200、300、400的有符号整数。 但是c1列比较奇怪,这里可以验证和主键有关系。

正常列就是按照数字进行存储的。至于主键列是怎么存储的,此处保留一个问题。

行号 变长字段 NULL值列表 记录头信息 trx_id roll_pointer c1列 c2列 c3列
第一行 04 00 00 00 10 00 20 80 00 00 01 00 00 13 94 79 79 f0 00 00  01 72 01 10 80 00 00 64 61 61 61 61
第二行 04 00 00 00 18 00 20 80 00 00 02 00 00 13 94 79 79 f0 00 00 01 72 01 1c 80 00 00 c8 62 62 62 62
第三行 04 00 00 00 20 00 20 80 00 00 03 00 00 13 94 79 79 f0 00 00 01 72 01 28 80 00 01 2c 63 63 63 63
第四行 04 00 00 00 28 ff 91 80 00 00 04 00 00 13 94 79 79 f0 00 00 01 72 01 34 80 00 01 90 64 64 64 64

标签:存储,01,00,InnoDB,MySQL,64,80,79
From: https://www.cnblogs.com/jkin/p/18009770

相关文章

  • Ubuntu18.04定时备份MySQL、PostgreSQL数据库
    1、备份MySQL数据库脚本LOG_DATE=`date+'%Y-%m-%d%H:%M:%S'`LOG_PATH=/home/dbserver/script_data/backup.logecho"$LOG_DATE=======>开始备份以下mysql数据库:">>${LOG_PATH}DUMP=/usr/bin/mysqldumpOUT_DIR=/home/dbserver/backup/mysql_backupLINU......
  • ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'mysql&
    转自https://www.cnblogs.com/jiangfeilong/p/10560754.html 关键要授予 WITHGRANTOPTION;#原因:修改数据库账号时删除了默认的localhostroot, 新建了%root 但没有赋予全部权限;解决方法:1.关闭数据库#mysqldstop2.在my.cnf里加入skip-grant-tables3.停止服务器......
  • CentOS安装配置MySQL详细教程
    CentOS安装配置MySQL详细教程一、卸载系统中自带的MariaDB#检查MariaDBrpm-qa|grepmariadb#卸载MariaDBrpm-e--nodepsmariadb-libs二、下载MySQL安装包下载地址https://downloads.mysql.com/archives/community/三、将MySQL压缩包上传至/opt目录四、解压MyS......
  • SAN和NAS存储
    SAN:是一种高速网络架构,用于连接存储设备(如磁盘阵列、磁带库)和服务器,实现存储资源的共享和管理,(如光纤通道、iSCSI、FCoE)连接存储设备和服务器,提供块级存储访问,具有高性能、可靠性和扩展性,适合大型企业和需要高性能、共享存储的应用场景,如虚拟化、数据库等。部署方式:(linux服务......
  • 实现流程可控的镜像下载和存储(一)
    基于https实现镜像所有相关元信息的获取在弱网环境下,下载镜像很慢且容易出错,基于这个原因需要开发更加可靠且支持断点续传的镜像下载程序由于DockerHub在国内无法访问,用自己的阿里云镜像加速替代来进行测试下面以下载linux/amd64的ubuntu22.04镜像为例Authentication例中的......
  • navicat连接mysql服务遇到的问题
    问题现象及描述:navicat连接数据库提示:2003-Can'tconnecttoMySqlserveron'192.168.245.131',(unkownerror)问题可能出现的原因:1、数据库连接ip、端口、用户名、密码信息输入错误(数据库连接四要素)2、该用户不可远程连接3、linux防火墙未开放解决方式数据库连接ip问题:......
  • MySQL-进阶
    一、MySQL体系结构1.连接层:一些客户端和连接服务,完成连接处理、授权认证及相关操作2.服务层:完成大多数核心服务的功能,比如SQL的分析和优化3.引擎层:负责MySQL中数据的存储和提取4.存储层:数据存储层,将数据存储在文件系统上,并完成与存储引擎的交互二、存储引擎(MySQL的核心)1.定......
  • java实现导出mysql数据库表信息
    java实现导出mysql数据库表信息,导出信息包含:数据库用户名,表英文名,表中文名,表业务描述,字段数量等等packagesrc.main.biz.ucenter.utils;importorg.apache.poi.ss.usermodel.Row;importorg.apache.poi.ss.usermodel.Sheet;importorg.apache.poi.ss.usermodel.Workbook;impor......
  • 云计算 - 对象存储服务OSS技术全解
    本文全面深入地探讨了对象存储服务(OSS)的核心技术、基础知识和高级功能。从媒体存储到数据备份,再到数据仓库与数据湖,我们不仅解析了OSS在各种应用场景下的关键角色,还深入讨论了其与机器学习、多媒体处理以及日志和监控等多个开发场景的结合。关注【TechLeadCloud】,分享互联网架......
  • 【转帖】解决Java/MySQL性能问题的思路
    plantegg.github.io/2023/08/28/解决问题思路/ 10年前写的,重新发一下系统性能问题CPU(基本上WEB服务器没有多少IO,主要是CPU有瓶颈)top/vmstat观察CPU使用率,Load负载,r/b线程数量等;IO(数据库大多数时候瓶颈是IO,主要是索引没建好;如果数据库CPU紧张的话,检查一下是不是orderb......