Fork me on GitHub

innodb的bufferPool

Buffer Pool的内存结构

image-20220701102240583

  • 由多个缓存数据页和管理这些数据页的链表数据组成。
  • 每个缓存页都有对应的描述数据,各个链表中除了基础节点存储头尾节点、节点个数之外,链表上的都是缓存页的描述数据。
  • LRU链表在缓存页不足时采用一些列冷热数据分离、热区数据分段移动到链表头部等算法来链表尾部的缓存页刷入磁盘。
  • 这三个链表组合使用,BufferPool中的缓存页的使用、刷盘、空闲管理是一个动态的过程。

多个Buffer Pool和Buffer Pool中的chunk划分

image-20220701102249934

  • Buffer Pool可以有多个,这样可以降低线程并发操作链表维护的成本,加大并发能力
  • Buffer Pool中有多个chunk划分,每个chunk是一系列的描述数据块和缓存页,多个chunk共享free、flush、lru链表。这样划分在Buffer Pool动态扩容时可以申请的内存小一点,避免申请多个连续的内存,降低碎片的产生。
  • show Engine innodb status。可以查看Buffer Pool和管理的链表使用情况。
-------------本文结束感谢您的阅读-------------

本文标题:innodb的bufferPool

文章作者:夸克

发布时间:2019年05月29日 - 10:05

最后更新:2022年07月01日 - 10:07

原始链接:https://zhanglijun1217.github.io/2019/05/29/innodb的bufferPool/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。