Buffer Pool的内存结构
- 由多个缓存数据页和管理这些数据页的链表数据组成。
- 每个缓存页都有对应的描述数据,各个链表中除了基础节点存储头尾节点、节点个数之外,链表上的都是缓存页的描述数据。
- LRU链表在缓存页不足时采用一些列冷热数据分离、热区数据分段移动到链表头部等算法来链表尾部的缓存页刷入磁盘。
- 这三个链表组合使用,BufferPool中的缓存页的使用、刷盘、空闲管理是一个动态的过程。
多个Buffer Pool和Buffer Pool中的chunk划分
- Buffer Pool可以有多个,这样可以降低线程并发操作链表维护的成本,加大并发能力
- Buffer Pool中有多个chunk划分,每个chunk是一系列的描述数据块和缓存页,多个chunk共享free、flush、lru链表。这样划分在Buffer Pool动态扩容时可以申请的内存小一点,避免申请多个连续的内存,降低碎片的产生。
- show Engine innodb status。可以查看Buffer Pool和管理的链表使用情况。