0%

InnoDB逻辑存储结构

InnoDB存储引擎的所有数据都被逻辑地存放在一个空间内,称为表空间,而表空间由段(sengment)、区(extent)、页(page)(一些文档中又称为块block)组成。

InnoDB逻辑存储结构

一、表空间

  1. InnoDB把数据保存在表空间内,不只是存储表和索引,还保存了回滚段、双写缓冲区等。表空间可以看作是InnoDB存储引擎逻辑结构的最高层,它本质上是一个由一个或多个磁盘文件组成的虚拟文件系统,

  2. 分类

    • 独立表空间:每一个表都将会生成以独立的文件方式来进行存储,需要开启innodb_file_per_table参数为on。*.frm表结构定义文件,.ibd数据、索引、表的内部数据字典信息表文件
    • 共享表空间:所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。

二、段segment

  1. 表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等

三、区extent

  1. 区是由连续的页(Page)组成的空间,每个区大小都为1MB,为了保证页的连续性,InnoDB存储引擎每次从磁盘一次申请4-5个区。
  2. 默认情况下InnoDB存储引擎的页大小为16KB,即一个区中有64(1MB/16KB)个连续的页。

四、页page

  1. 页是InnoDB存储引擎磁盘管理的最小单位,每个页默认16KB。
  2. 常见页类型
    • 数据页(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)

五、行row

  1. InnoDB存储引擎是面向行的(row-oriented),即数据是按行进行存放的,每个页存放的行记录也是有硬性定义的,最多允许存放16KB/2 - 200 = 7992行记录。