深入了解Mysql【五】InnoDB逻辑存储结构
InnoDB存储引擎的所有数据都逻辑地存储在表空间(tablespace)中,表空间又由段(segment)、区(extent)、页(page)组成、行(row)。
如图:
1、表空间(tablespace)
所有数据都是存储在表空间中,InnoDB有一个默认的共享表空间ibdata1,每张表也可以有单独的表空间ibd。
单独的表空间中存放的只有数据、索引和插入缓存,其他的数据,如:Undo(撤销)信息,系统事务信息,二次写缓存(double write buffer)等还是存放在共享表空间中。
2、段(segment)
表空间由段组成,常见有数据段、索引段、回滚段。
- 数据段为B+树的叶子节点,图中的leaf node segment。
- 索引段为B+树的非索引节点,图中的non-leaf node segment。
- 回滚段就是图中的rollback segment。
注意:并不是每个对象都有段,因此可以说表空间是由分散的页和段组成。
3、区(extent)
- 每个区的大小为1MB。对于大的数据段,每次最多可以申请4个区,以此保证数据的顺序性能。
- 一个区是物理上连续分配的一段空间,每一个段至少会有一个区,在创建一个段时会创建一个默认的区。
- 如果存储数据时,一个区已经不足以放下更多的数据,此时需要从这个段中分配一个新的区来存放新的数据。
- 一个段所管理的空间大小是无限的,可以一直扩展下去,但是扩展的最小单位就是区。
4、页(page)
页是构成区的基本单位,也是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)
5、行(row)
InnoDB存储引擎是面向行的,也就是说数据的存放是按行进行存放。
InnoDB存储引擎总是按照主键索引的顺序进行存放的,上面这些可以简单的了解其逻辑存储的结构,
本来想把页的数据结构整理一下,但是感觉东西太多,记不住,了解一下算了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!