mysql buffer poll

一 buffer poll 简介

客户端访问数据时,mysql每次会从磁盘中加载数据页到内存中, mysql启动的时候会在内存中开辟一块buffer Poll 区域专门用来存储从磁盘中加到内存的数据页。

buffer poll默认设置大小128M,可以修改配置调节。

buffer poll结构: 由控制块和缓冲页组成, 每个控制块关联一个缓冲页,如下图:

mysql buffer poll

二 几种链表结构

1 free 链

mysql启动的时候,buffer Poll中是空的,缓冲页中数据都是空闲的, 所有的缓冲页的控制块会串联在free链条上,一旦某个缓冲页加载到数据后,就会从链条上移走。
mysql buffer poll

2 脏 链

缓冲页的数据被修改后并不会立刻同步到磁盘中, 会先把缓冲页对应的控制块串联到脏 链上,定时任务定期同步到磁盘上。

3 LRU 链

经常读取的缓冲页会串联到lru链条上, lru链分成 young热点数据区(缓存命中率高)和old冷数据区(首次加载/缓存命中率低)两部分,通过配置可以设置两部分的比例,首次从磁盘中加载的数据会先存放到old区域,old区域有个时间间隔,在时间间隔范围内重复读取数据不会移动数据到young 区域, 当超过时间间隔才会移动数据到young 部分。

当缓冲的数据大小超过了buffer poll设置的大小时,会根据lru算法, 从lru链上清除掉最近不经常使用的缓冲页, 一般最先清除掉的是old冷数据区的缓冲页。

mysql buffer poll