概述
今天谈谈mysql的innodb缓存和介绍一下怎么统计其命中率。
1、InnoDB的Buffer Pool
Buffer Pool本质上是InnoDB向操作系统申请的一段连续的内存空间,可以通过innodb_buffer_pool_size来调整它的大小。
那么怎么将磁盘上的页缓存到内存中的Buffer Pool中呢?是直接把需要缓存的页向Buffer Pool里一个一个往里怼么?其实为了更好的管理这些被缓存的页,InnoDB为每一个缓存页都创建了一些所谓的控制信息,这些控制信息包括该页所属的表空间编号、页号、页在Buffer Pool中的地址,一些锁信息以及LSN信息,当然还有一些别的控制信息,这里就忽略了,反正大家也记不住。
每个缓存页对应的控制信息占用的内存大小是相同的,我们就把每个页对应的控制信息占用的一块内存称为一个控制块吧,控制块和缓存页是一一对应的,它们都被存放到 Buffer Pool 中,其中控制块被存放到 Buffer Pool 的前边,缓存页被存放到 Buffer Pool 后边,所以整个Buffer Pool对应的内存空间看起来就是这样的: