Innodb-基本概念

232 阅读2分钟

本文正在参加「技术专题19期 漫谈数据库技术」活动

最近一直在更新Innodb的博客,也是自己在深入学习Innodb数据引擎,课时这个过程当中发现好多书籍包括博客并没有指出innodb的一些基本的概念,比如,区,数据页等等,所以就尝试自己总结了一些innodb的基本结构,来为Innodb学习做一个伏笔。

存储结构

感觉,这个知识点应该是学习Innodb应该最先掌握的知识点,Innodb是基于磁盘存储的存储引擎,我们在学习他的一系列的特点之前,先得搞明白他的存储结构。

image-20221122072202450.png

innodb的数据文件存储结构:一个表空间(Tablespace)包含 idb文件 包含 段(Segment)包含 区(Extend)包含 页(Page)包含 行(Row)

子结构理解

从小到大,我们来理解一下上面图上展示的这些概念:

这里应该是贴近mysql基本操作的,一次sql insert操作的数据,就是一行。当我们插入一行数据之后。

页是InnoDB存储引擎磁盘管理的最小单位,每个页默认16KB;InnoDB存储引擎从1.2.x版本开始,可以通过参数innodb_page_size将页的大小设置为4K、8K、16K。

区是由连续页组成的空间,在任何情况下每个区的大小都为1MB。为了保证区中页的连续性,InonoDB存储引擎一次从磁盘申请4-5个区。在默认情况下,InnoDB存储引擎的页的大小为16KB,即一个区中应有64个连续的页。(嘿嘿嘿,我的图里正好画了64个)

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

InnoDB存储引擎表是索引组织(index organized)的,因此数据即索引,索引即数据。那么数据段即为B+树的叶子节点(Leaf node segment),索引段即为B+树的非索引节点(Non-leaf node segment)

表空间

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

在默认情况下,InnoDB存储引擎都有一个共享表空间ibdata1,即所有数据都存放在这个表空间内。如果用户启用了参数innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内。

如果启用了innodb_file_per_table参数,也需要注意,每张表的表空间存放的只是数据、索引和插入缓冲Bitmap页,其它类的数据,如回滚(undo)信息,插入缓冲索引页、系统事务信息,二次写缓冲等还是存放在原来的共享表空间内。

这篇文章就先简单的介绍一下,之后,我们一一进行拆解详细介绍。

本文正在参加「技术专题19期 漫谈数据库技术」活动