返回

深入剖析 MySQL 的 InnDB 存储引擎:揭秘页结构

后端

InnDB 存储引擎的页结构

InnDB 存储引擎的数据存储单元是数据页,每个数据页的大小为 16KB。数据页存储着表的数据行、索引键值以及其他元数据信息。数据页分为以下几种类型:

  • 数据页: 存储表的数据行。
  • 索引页: 存储索引键值以及指向相应数据页的指针。
  • 插入缓冲信息页: 存储插入缓冲区的信息,用于加速插入操作。
  • 撤销日志页: 存储回滚操作的信息,用于支持事务的回滚。
  • 系统页: 存储表空间文件的元数据信息,例如表结构信息、索引信息等。

数据页结构

数据页是 InnDB 存储引擎最基本的存储单元,它存储着表的数据行以及其他元数据信息。数据页的结构如下图所示:

+---------------------------------------------------+
| 页头 (Page Header)                               |
+---------------------------------------------------+
| 空闲空间 (Free Space)                             |
+---------------------------------------------------+
| 行数据 (Row Data)                                 |
+---------------------------------------------------+
| 行指针 (Row Pointers)                             |
+---------------------------------------------------+
| 页尾 (Page Trailer)                               |
+---------------------------------------------------+
  • 页头: 存储页面的基本信息,例如页号、页类型、页状态等。
  • 空闲空间: 存储未被使用的空间。
  • 行数据: 存储表的数据行。
  • 行指针: 存储指向数据行的指针。
  • 页尾: 存储页面的校验和信息。

索引页结构

索引页存储着索引键值以及指向相应数据页的指针。索引页的结构与数据页的结构类似,但索引页的页头和页尾存储的信息有所不同。索引页的页头存储索引键值的范围信息,索引页的页尾存储索引页的下一个索引页的指针。

插入缓冲信息页结构

插入缓冲信息页存储插入缓冲区的信息,用于加速插入操作。插入缓冲区是一个临时缓冲区,用于存储即将插入到表中的数据行。当插入缓冲区满时,插入缓冲区中的数据行将被写入数据页。插入缓冲信息页的结构如下图所示:

+---------------------------------------------------+
| 页头 (Page Header)                               |
+---------------------------------------------------+
| 插入缓冲信息 (Insert Buffer Information)       |
+---------------------------------------------------+
| 页尾 (Page Trailer)                               |
+---------------------------------------------------+
  • 页头: 存储页面的基本信息,例如页号、页类型、页状态等。
  • 插入缓冲信息: 存储插入缓冲区的信息,例如插入缓冲区的大小、插入缓冲区中的数据行数量等。
  • 页尾: 存储页面的校验和信息。

撤销日志页结构

撤销日志页存储回滚操作的信息,用于支持事务的回滚。撤销日志页的结构如下图所示:

+---------------------------------------------------+
| 页头 (Page Header)                               |
+---------------------------------------------------+
| 撤销日志信息 (Undo Log Information)             |
+---------------------------------------------------+
| 页尾 (Page Trailer)                               |
+---------------------------------------------------+
  • 页头: 存储页面的基本信息,例如页号、页类型、页状态等。
  • 撤销日志信息: 存储回滚操作的信息,例如回滚操作的类型、回滚操作涉及的数据行等。
  • 页尾: 存储页面的校验和信息。

系统页结构

系统页存储表空间文件的元数据信息,例如表结构信息、索引信息等。系统页的结构如下图所示:

+---------------------------------------------------+
| 页头 (Page Header)                               |
+---------------------------------------------------+
| 系统信息 (System Information)                    |
+---------------------------------------------------+
| 页尾 (Page Trailer)                               |
+---------------------------------------------------+
  • 页头: 存储页面的基本信息,例如页号、页类型、页状态等。
  • 系统信息: 存储表空间文件的元数据信息,例如表结构信息、索引信息等。
  • 页尾: 存储页面的校验和信息。

总结

通过本文的介绍,您已经对 InnDB 存储引擎的页结构有了一个深入的了解。这些知识将帮助您更好地理解 MySQL 的数据存储机制,并对 MySQL 的性能优化打下坚实的基础。