[TOC]
## 缓存池
InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。
缓存池简单来说就是一块内存区域。
通过参数innodb_buffer_pool_size配置缓存池: `show variables like 'innodb_buffer_pool_size'\G`
内存结构:
![](https://box.kancloud.cn/4cd2284ff4362e47710ebe90aa9fc9d4_794x299.png)
InnoDB 1.0.x开始允许多个缓存实例。
参数innodb_buffer_pool_instances来进行配置 默认唯1。
![](https://box.kancloud.cn/3908739be0890daefa25489ed6c4d488_700x94.png)
参数innodb_buffer_pool_instances可以设置大于1的值就可以得到多个缓冲池实例。
再通过命令`SHOW ENGINE INNODB STATUS\G;` 观察内容
mysql5.6开始:
`SELECT POOL_ID POOL_SIZE, FREE_BUFFERS,DATABASE_PAGES FROM INNODB_BUFFER_POOL_STATS\G`
查看缓冲状态。
*****
## LRU List、Free List 和 Flush List
缓存池默认页大小16kB,同样使用LRU算法进行缓冲池进行管理。
![](https://box.kancloud.cn/b97f4fd8d08ad94809cf731c52fbf898_876x424.png)
![](https://box.kancloud.cn/8b5de1bc2ab5e5df499a92cdd1e15757_802x363.png)
通过information_schema架构下的表观察unzip_LRU列表中的页:`SELECT TABLE_NAME,SPACE,PAGE_NUMBER,COMPRESSED_SIZE FROM INNODB_BUFFER_PAGE_LRU WHERE C
OMPRSSED_SIZE <> 0;`
Flush List为脏页列表;
![](https://box.kancloud.cn/0a771448997c98db048fddca47971938_792x154.png)
*****
## 重做日志缓冲
![](https://box.kancloud.cn/f75f7e4ec65857de30137f676e37cc77_841x328.png)
*****
## 额外的内存池
在对一些数据结构本身的内存进行分配时,需要从额外的内存池中进行申请,当该区域的内存不够的时候,会从缓冲池进行申请。