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存储引擎》 第二版 姜承尧

目录
相关文章
|
8月前
|
存储 关系型数据库 MySQL
MySQL InnoDB数据存储结构
MySQL InnoDB数据存储结构
|
7月前
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
148 7
|
7月前
|
存储 算法 关系型数据库
【MySQL技术内幕】4.4-InnoDB数据页结构
【MySQL技术内幕】4.4-InnoDB数据页结构
135 1
|
7月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
120 3
|
7月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】4.2-InnoDB逻辑存储结构
【MySQL技术内幕】4.2-InnoDB逻辑存储结构
62 0
|
8月前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
477 4
|
7月前
|
存储 关系型数据库 MySQL
第七章InnoDB数据存储结构
第七章InnoDB数据存储结构
37 0
|
15天前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
20天前
|
存储 关系型数据库 MySQL
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
65 7
|
29天前
|
存储 关系型数据库 MySQL
Mysql索引:深入理解InnoDb聚集索引与MyisAm非聚集索引
通过本文的介绍,希望您能深入理解InnoDB聚集索引与MyISAM非聚集索引的概念、结构和应用场景,从而在实际工作中灵活运用这些知识,优化数据库性能。
129 7