image.png
buffer pool在整个增删改中的架构位置

image.png

什么是buffer pool?

buffer pool 是mysql中的一个内存区域,是为了弥补磁盘速度太慢引入的,对于mysql的增删改都是基于buffer pool的。

image.png

buffer pool中是缓存页和描述信息组成的,一个缓存页对应一个描述信息,每个缓存页的大小和磁盘的数据页大小一样(16K),
innodb 可以配置多个buffer pool实例,buffer pool 的总大小 = (chunk⼤⼩ * buffer pool数量)的倍数
因为可以新加入trunk块,所以可以动态调整buffer pool的大小,如果不是trunk这种模式,如果想从8G转换为16G还得申请一个16G内存的数据,并且把数据再复制过去。

innodb中用哪些数据结构对buffer pool进行管理?(LRU list,Free list,Flush List。)

先谈一下buffer pool 是怎样初始化的,数据库启动后,就会按照设置的buffer pool 去找操作系统要一个内存块,然后按照默认缓冲页的16K大小和800个字节的描述信息 去buffer pool中划分出一个一个的缓存页和描述信息、
free链表中会存放所有的空闲缓存页的描述信息,所以初始化的时候 buffer pool 中所有的描述信息都在free链表中
注意这里的链表都是双向链表 为什么这里使用双向链表呢?双向链表一般都用在类似浏览器前进后退中吧 关于双向链表的介绍和优缺点—>https://codeforwin.org/2015/10/c-program-to-create-and-traverse-doubly-linked-list.html

如何支撑并发访问?

1、排队 即使排队也是很快的。
2、多个buffer pool 实例 , 每个实例有一部分数据。

innodb的buffer pool和kafka rocket mq的内存有和异同?

参考

https://www.modb.pro/db/13306
https://codeforwin.org/2015/10/c-program-to-create-and-traverse-doubly-linked-list.html