InnoDB逻辑存储结构

InnoDB存储引擎所有数据都被逻辑地存放在一个空间中,称之为表空间(table space)。

表空间又由段(segment)、区(extent)、页(page)组成。

表空间

表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。

表空间是由各种段组成的,常见的段有

  • 数据段(B+树的叶子节点)
  • 索引段(B+树的非叶子节点)
  • 回滚段

区是由连续页组成的空间,在任何情况下每个区的大小都为1MB。为了保证区中

页的连续性,InnoDB存储引擎一次从磁盘申请4~5个区。在默认情况下,InnoDB

存储引擎页的大小为16KB,即一个区中一共有64个连续的页。

每个段开始时,先用32个页大小的碎片页(fragment page)来存放数据,

在使用完这些页之后才是64个连续页的申请。

InnoDB中页也被称为块。页是InnoDB磁盘管理的最小单位。在InnoDB存储引擎中

默认每个页的大小为16KB,从InnoDB 1.2.x开始,可以通过innodb_page_size

页的大小设置为4KB8KB16KB。若设置完成,则不可再次修改,除非通过

mysqldump导入和导出操作来产生新的库。

常见的页类型有

  • 数据页(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存储引擎是面向列的(row-oriented),也就是数据是按行进行存放的。

每个页存放的行记录也是有限制的,最多存放16KB / 2B - 200行的记录,即7992行记录。