Innodb 原理分析

Innodb存储引擎是第一个完整支持ACID事务的MySQL存储引擎,特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读。

InnoDB Architecture

https://dev.mysql.com/doc/refman/9.4/en/images/innodb-architecture-8-0.png

InnoDB存储结构

表空间 Tablespaces

InnoDB存储引擎的逻辑存储结构是将所有的数据都被逻辑地放在了一个空间中。如果用户启用了参数 innodb_file_per_table(在8.0版本中默认开启) ,则每张表都会有一个表空间(xxx.ibd),一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。

表空间分为系统表空间(System Tablespaces)(共享表空间ibdata1)临时表空间(Temporary Tablespaces)、常规表空间(General Tablespaces)、Undo表空间(Undo Tablespaces)和独立表空间(File-Per_Table Tablespaces)(独立表空间)

系统表空间 System Tablespace

系统表空间可以对应文件系统上一个或多个实际的文件,默认情况下, InnoDB会在数据目录下创建一个名为.ibdata1,大小为 12M的文件。该文件是可以自扩展的,当不够用的时候它会自己增加文件大小。

1
2
3
4
SHOW VARIABLES LIKE '%innodb_data_file_path%';

# Variable_name Value
1 innodb_data_file_path ibdata1:12M:autoextend
1
SHOW VARIABLES LIKE '%innodb_file_per_table%';

段(Segment)分为索引段数据段回滚段等。InnoDB是索引组织表,索引段就是非叶子结点部分,而数据段就是叶子结点部分,回滚段用于数据的回滚和多版本控制。一个段包含256个区(256M大小)。

区是页的集合,一个区包含64个连续的页,默认大小为 1MB (64*16K)。

页是InnoDB管理存储空间的基本单位,也是内存和磁盘交互的基本单位。

1
SHOW VARIABLES LIKE 'innodb_page_size'

InnoDB内存结构