MySQL知识点总结(六)——InnoDB底层架构
InnoDB底层架构总览
关于InnoDB底层架构,网上有一张非常经典的图:
首先InnoDB从整体上分为两大块,一块是内存结构,一块是磁盘结构。
内存结构方面主要有“Buffer Pool”、“Log Buffer”、“Adaptive Hash Index”,其中“Buffer Pool”中还包含了一个“Change Buffer”要特别注意。
- Buffer Pool是InnoDB的内存缓存池,通过Buffer Pool缓存查询结果所在的数据页,下次查询时可以在Buffer Pool中对应的数据页直接取得查询结果,无需再走磁盘IO。
- Change Buffer是Buffer Pool的一部分,InnoDB把数据页的更新缓存到Change Buffer,避免每次SQL增删改都通过磁盘IO更新磁盘数据页,提高SQL增删改的性能。
- Log Buffer是InnoDB的redo log在内存中的缓存,由于InnoDB不会立刻把已被修改的数据页刷到磁盘中,为了避免更新的数据丢失,需要用redo log作为预写日志。
- Adaptive Hash Index是InnoDB默认开启的功能,通过hash算法快速定位缓存到Buffer Pool中的数据页。
而磁盘结构则主要是各种表空间tablespace,以及Redo Log日志文件。
Redo Log很好理解,就是内存中的log buffer持久化到磁盘中的日志文件。
而这里的各种表空间,就有点多,主要包含5类表空间:“System Tablesapce”、“File-Per-Table Tablespaces”、“General Tablespaces”、“Undo Tablespaces”、“Temporary Tablespaces”。
- System Tablesapce:系统表空间,全局只有一份,存储Doublewrite Buffer、Change Buffer、Undo Logs等数据。
- File-Per-Table Tablespaces:我们可以设置我们的每个表自己单独存放在独立的表空间,此时我们每创建一个表,InnoDB都会为我们自动创建一个表空间,每个表空间单独一个“.ibd”文件。老版本的MySQL默认是不开启的,但是从5.6.6版本开始,默认是开启的。
- General Table