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

目录
相关文章
|
6月前
|
存储 关系型数据库 MySQL
MySQL InnoDB数据存储结构
MySQL InnoDB数据存储结构
|
5月前
|
存储 算法 关系型数据库
【MySQL技术内幕】4.4-InnoDB数据页结构
【MySQL技术内幕】4.4-InnoDB数据页结构
111 1
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
107 7
|
5月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
98 3
|
5月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】4.2-InnoDB逻辑存储结构
【MySQL技术内幕】4.2-InnoDB逻辑存储结构
48 0
|
5月前
|
存储 关系型数据库 MySQL
第七章InnoDB数据存储结构
第七章InnoDB数据存储结构
29 0
|
6月前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
409 4
|
8天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
113 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
8天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的表空间
InnoDB是MySQL默认的存储引擎,主要由存储结构、内存结构和线程结构组成。其存储结构分为逻辑和物理两部分,逻辑存储结构包括表空间、段、区和页。表空间是InnoDB逻辑结构的最高层,所有数据都存放在其中。默认情况下,InnoDB有一个共享表空间ibdata1,用于存放撤销信息、系统事务信息等。启用参数`innodb_file_per_table`后,每张表的数据可以单独存放在一个表空间内,但撤销信息等仍存放在共享表空间中。
|
8天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的段、区和页
MySQL的InnoDB存储引擎逻辑存储结构与Oracle相似,包括表空间、段、区和页。表空间由段和页组成,段包括数据段、索引段等。区是1MB的连续空间,页是16KB的最小物理存储单位。InnoDB是面向行的存储引擎,每个页最多可存放7992行记录。