mysql buffer poll
一 buffer poll 简介
客户端访问数据时,mysql每次会从磁盘中加载数据页到内存中, mysql启动的时候会在内存中开辟一块buffer Poll 区域专门用来存储从磁盘中加到内存的数据页。
buffer poll默认设置大小128M,可以修改配置调节。
buffer poll结构: 由控制块和缓冲页组成, 每个控制块关联一个缓冲页,如下图:
二 几种链表结构
1 free 链
mysql启动的时候,buffer Poll中是空的,缓冲页中数据都是空闲的, 所有的缓冲页的控制块会串联在free链条上,一旦某个缓冲页加载到数据后,就会从链条上移走。
2 脏 链
缓冲页的数据被修改后并不会立刻同步到磁盘中, 会先把缓冲页对应的控制块串联到脏 链上,定时任务定期同步到磁盘上。
3 LRU 链
经常读取的缓冲页会串联到lru链条上, lru链分成 young热点数据区(缓存命中率高)和old冷数据区(首次加载/缓存命中率低)两部分,通过配置可以设置两部分的比例,首次从磁盘中加载的数据会先存放到old区域,old区域有个时间间隔,在时间间隔范围内重复读取数据不会移动数据到young 区域, 当超过时间间隔才会移动数据到young 部分。
当缓冲的数据大小超过了buffer poll设置的大小时,会根据lru算法, 从lru链上清除掉最近不经常使用的缓冲页, 一般最先清除掉的是old冷数据区的缓冲页。