innodb逻辑存储结构整理

简介: 从innodb存储引擎的逻辑存储来看,所有数据都被逻辑地存放在一个空间中,称之为表空间tablespace,表空间又由段segment、区extent、页page组成。

在默认情况下,innodb存储引擎有一个共享表空间ibdata1,所有数据都存放在这个表空间内。如果开启了innodb_file_per_table,则每张表内的数据可以单独放在一个表空间内。


表空间由各个段组成,常见的段有数据段、索引段、回滚段等。

数据段即B+树的叶子节点

索引段:B+树的非索引节点


对段的管理是由innodb引擎自身完成的,DBA没有必要进行控制。


是由连续页组成的空间,在任何情况下,每个区的大小都是1MB。为了保证区中页的连续性,innodb存储引擎一次从磁盘申请4~5个区。在默认情况下,innodb存储引擎页的大小为16KB,即一个区中一共有64个连续的页。


innodb磁盘管理的最小单位,默认每个页的大小为16KB,而从1.2.x版本开始,可以通过参数innodb_page_size将页的大小设置为4K、8K、16K。

在innodb存储引擎中,常见的页类型:

数据页 B-tree Node

undo页 undo log page

系统页 system page

事务数据页 transaction system page

插入缓冲位图页 insert buffer bitmap

插入缓冲空闲列表页 insert buffer free list

未压缩的二进制大对象页 uncompressed blob page

压缩的二进制大对象页 compressed blob page



innodb存储引擎的数据是按照行存储的,每个页存放的行记录也是有硬性定义的,最多允许存放(16KB/2)-200行的记录,即7992行记录。


innodb存储引擎提供了Compact和Redundant两种格式来存放行记录数据。Redundant格式是为了兼容之前版本而保留的。

在mysql5.1版本中,默认设置为Compact格式。

Compact格式存储的方式:

变长字段长度列表

NULL标志位

记录头信息

列数据


还有两个隐藏列:事务ID  transaction ID和回滚指针列 roll pointer

一般认为blob、lob这类大对象列类型的存储会把数据存放在数据页面之外。


行溢出数据

可以将一条记录中的某些数据存储在真正的数据页面之外,一般认为BLOB、LOB这类的大对象列类类型的存储会把数据存放在数据页面之外。即使是varchar依然有可能存放在数据页面之外。



innodb1.0.x版本开始引入了新的文件格式,以前支持Compact和Redundant格式称为Antelope格式,新的文件格式称为Barracuda文化格式。Barracuda文件格式有两种行记录格式:Compressed和Dynamic。


新的两种记录格式对于存放BLOB中的数据采用完全的行溢出的方式。

也即在数据页只存放对应的字节指针,实际的数据都存放在Off Page中,而之前的Compact和Redundant格式会存放768个前缀字节。


Compressed行记录格式的另一个功能就是存储在其中行的数据会以zlib的算法进行压缩。


innodb数据页结构

数据主要存在非叶子节点。

innodb数据页由以下7部分组成:

File Header 文件头

Page Header 页头

Infimun和Supreme Record

User Record 用户记录,行记录

Free Space 空闲空间

Page Directory 页目录

File Trailer 文件结尾信息


参考:《MySQL技术内幕InnoDB存储引擎》 第二版 姜承尧

目录
相关文章
|
20天前
|
存储 SQL 关系型数据库
MySQL底层概述—2.InnoDB磁盘结构
InnoDB磁盘结构主要包括表空间(Tablespaces)、数据字典(Data Dictionary)、双写缓冲区(Double Write Buffer)、重做日志(redo log)和撤销日志(undo log)。其中,表空间分为系统、独立、通用、Undo及临时表空间,分别用于存储不同类型的数据。数据字典从MySQL 8.0起不再依赖.frm文件,转而使用InnoDB引擎存储,支持事务原子性DDL操作。
197 100
MySQL底层概述—2.InnoDB磁盘结构
|
20天前
|
缓存 算法 关系型数据库
MySQL底层概述—1.InnoDB内存结构
本文介绍了InnoDB引擎的关键组件和机制,包括引擎架构、Buffer Pool、Page管理机制、Change Buffer、Log Buffer及Adaptive Hash Index。
198 97
MySQL底层概述—1.InnoDB内存结构
|
9月前
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
206 7
|
9月前
|
存储 算法 关系型数据库
【MySQL技术内幕】4.4-InnoDB数据页结构
【MySQL技术内幕】4.4-InnoDB数据页结构
149 1
|
9月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
144 3
|
9月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】4.2-InnoDB逻辑存储结构
【MySQL技术内幕】4.2-InnoDB逻辑存储结构
72 0
|
9月前
|
存储 关系型数据库 MySQL
第七章InnoDB数据存储结构
第七章InnoDB数据存储结构
42 0
|
17天前
|
SQL 关系型数据库 MySQL
MySQL底层概述—10.InnoDB锁机制
本文介绍了:锁概述、锁分类、全局锁实战、表级锁(偏读)实战、行级锁升级表级锁实战、间隙锁实战、临键锁实战、幻读演示和解决、行级锁(偏写)优化建议、乐观锁实战、行锁原理分析、死锁与解决方案
MySQL底层概述—10.InnoDB锁机制
|
19天前
|
存储 缓存 关系型数据库
MySQL底层概述—5.InnoDB参数优化
本文介绍了MySQL数据库中与内存、日志和IO线程相关的参数优化,旨在提升数据库性能。主要内容包括: 1. 内存相关参数优化:缓冲池内存大小配置、配置多个Buffer Pool实例、Chunk大小配置、InnoDB缓存性能评估、Page管理相关参数、Change Buffer相关参数优化。 2. 日志相关参数优化:日志缓冲区配置、日志文件参数优化。 3. IO线程相关参数优化: 查询缓存参数、脏页刷盘参数、LRU链表参数、脏页刷盘相关参数。
MySQL底层概述—5.InnoDB参数优化
|
20天前
|
存储 SQL 关系型数据库
MySQL底层概述—4.InnoDB数据文件
本文介绍了InnoDB表空间文件结构及其组成部分,包括表空间、段、区、页和行。表空间是最高逻辑层,包含多个段;段由若干个区组成,每个区包含64个连续的页,页用于存储多条行记录。文章还详细解析了Page结构,分为通用部分(文件头与文件尾)、数据记录部分和页目录部分。此外,文中探讨了行记录格式,包括四种行格式(Redundant、Compact、Dynamic和Compressed),重点介绍了Compact行记录格式及其溢出机制。最后,文章解释了不同行格式的特点及应用场景,帮助理解InnoDB存储引擎的工作原理。
MySQL底层概述—4.InnoDB数据文件