[ 从MySQL架构到InnoDB存储引擎2 | 青训营笔记 ]

79 阅读2分钟

InnoDB下数据存在什么介质上?

存在硬盘上。硬盘可以是机械硬盘,也可以是固态硬盘。也存在内存中。

InnoDB下数据是如何在硬盘中组织的?

结论:表数据存在.ibd文件中。创建一张表,就会在磁盘中创建一个.ibd文件。 而一个.ibd文件对应一个表空间。所以可以说,InnoDB的磁盘结构,是由表空间组成的。

表数据——存在——>.ibd文件——对应——>表空间

表空间也分类,有独立表空间和共享表空间。 独立表空间里只会存一张表的数据; 共享表空间里可以存多张表的数据;

注:

1、InnoDB的表默认使用独立表空间。如果想使用共享表空间,就把file_per_table设置为0。

2、如果要把buffer pool中的数据同步到磁盘文件,可以不经过页面缓存直接写入。

3、如果要把log buffer里的数据同步到磁盘文件,必须先存进页面缓存,然后页面缓存会选择合适的时间将数据刷入磁盘。

InnoDB下数据是如何在内存中组织的?

InnoDB在内存中占用了三大块:buffer pool、log pool、page cache(页面缓存)。

buffer pool

有啥用?

缓存磁盘中的数据。

为什么需要buffer pool?

执行器在执行SQL语句时,会调用存储引擎层中的InnoDB实现的接口来完成数据库读写操作。既然是数据库读写,就要发起磁盘IO。 众所周知磁盘IO很耗性能,所以可以在存储引擎和硬盘文件之间设一层缓冲,也就是buffer pool,存在内存中。

page cache

有啥用?

帮助内存把脏页同步到磁盘。

InnoDB下数据的组织结构是什么?

B+树

InnoDB支持哪些数据库功能?

事务、行级锁、外键、数据缓存等等。