🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[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) ***** ## 额外的内存池 在对一些数据结构本身的内存进行分配时,需要从额外的内存池中进行申请,当该区域的内存不够的时候,会从缓冲池进行申请。