
Innodb有多个内存块(缓冲池innodb_buffer_pool_size、重做日志缓冲池innodb_log_buffer_size、额外内存池innodb_additional_mem_pool_size),这些内存块组成了一个大的内存池,负责如下工作:
- 维护内部数据结构
- 缓存磁盘数据:对磁盘数据修改前,在此缓存
- 重做日志缓冲
- …
查看缓冲池(innodb_buffer_pool_size)大小,同理可看重做日志缓冲池和额外内存缓冲池

1. 缓冲池
缓冲池结构
读取
将数据库文件按页(16K)读取到缓冲池,使用LRU(最近最少未使用)来保留缓冲池中的缓存数据。
修改
首先修改缓冲池中的页,发生修改后该页即为脏页,然后再按照一定的频率将缓冲池中的页刷新到文件
查看缓冲池使用情况
mysql> show engine innodb status\G;

我们可以看到返回结果中一项BUFFER POOL AND MEMORY,可查看当前INNODB的内存使用情况。
- Buffer pool size:缓冲池分配了多少页,这里一共分配了8192页,每页16K,共8192*16/1024=128M
- Free buffers:当前空闲缓冲帧
- Database pages:已经使用的缓冲帧
- Modified db pages:脏页的数量
2. 日志缓冲
日志缓冲将重做日志信息先放入这个缓冲区,然后按照一定的频率将其刷新到重做日志文件。一般每秒钟都会将重做日志刷新到日志文件,因此我们只需要保证每秒产生的十五辆在这个缓冲大小之内即可。
当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲会被刷新到重做日志文件。3. 额外内存池
对一些数据结构本身分配内存时,需要从额外的内存池中申请,当该区域的内存不够时,会从缓冲池中申请。
