读书笔记-MySQL运维内参07-InnoDB数据存储结构

表空间文件组成结构

InnoDB存储引擎按照表空间进行管理。

在新建一个数据时,InnoDB存储引擎会初始化一个名为ibdata1的表空间文件。

默认情况下,这个文件会存储所有表的数据,以及我们所熟知但是看不到的SYS_TABLES, SYS_COLUMNS, SYS_INDEXES, SYS_FIELDS等。

此外,还用来存储保证数据完整性的的回滚端数据。

可以通过设置InnoDB_file_per_table来设置,使得每一个表都对应一个独立的表空间文件。

段是表空间文件的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引、表、回滚段的基本元素。

创建一个索引(B+)树的同时,会创建两个段,分别是内节点段和叶子节点段。

索引数据量一直在增长过程中,所有新的存储空间的申请,都是从段这个逻辑概念中申请的。

更形象的说,ibd文件就是由多个端组成的,没有任何其他空间是脱离了段的管理的。

我们已经知道,一个索引由两个段组成,段是一个逻辑概念。段中的组织结构师什么样子?InnoDB引入了簇的概念,在代码中是Extent。

簇是构成段的基本元素,一个段有若干个簇构成。

一个簇是物理上连续分配的一段空间,每一个段至少会有一个簇,在创建一个段时会创建一个默认的簇。

如果存储数据时,一个簇已经不足以存储更多的数据,此时需要从这个段中分配一个新的簇来存放新的数据。

簇的空间大小是固定的,一般是64个页。

一个索引由两个段组成,两个段之间的物理位置是没有关系的。每个段由若干个簇组成,多个簇的物理位置也是没有关系的,但是会有指针连接。

页面

我们已经知道段和簇的关系了。但是簇的物理空间内部还需要继续被切分并高效管理。

页面就是簇被细分后的产物,它是组成簇的基本单位。

页面是段所管理的最小单位,也是数据库文件管理的最小单位,当然也是文件中空间分配的最小单位。

一个簇中可以包括多个页面,默认是64个。

在一个簇中,逻辑上这些页面号都是从小到大连续的,物理上也是连续的。

每一个页面的默认大小是16K。

原文地址:https://www.cnblogs.com/shizheyangde/p/7436710.html