04-Buffer Pool
2022-12-28 15:24:23 0 举报
Buffer Pool
作者其他创作
大纲/内容
Buffer Pool划分缓存页时,会让所有缓存页和描述数据块紧密挨在一块
描述数据
逻辑概念
无空闲缓存页,仍需加载新的数据页
基础节点count=n
Buffer Pool(默认大小128MB)
结束节点
只要缓存页为空,描述数据就会加入到free链表
缓存页
缓存页和磁盘上的数据不一致
LRU链表
innodb_read_ahead_threshold=56(默认)
预读机制顺带加载进来,实际无人访问
最少访问的一定是在尾部
一行数据
加载新的数据页到缓存页中,但是free链表中没有空闲缓存页
如果顺序的访问了一个区里的多个数据页,访问的数据页数超过了阈值,就会触发预读机制
频繁被访问的缓存页被淘汰
包含很多数据页
触发条件
Free链表由Buffer Pool里的数据块组成
描述数据=缓存页*5%
开始节点
LRU链表头指针
加载数据页到Buffer Pool中大小对应16KB
所有频繁访问的数据,全部在尾部
所有表数据插入到LRU前面
某个缓存页本在LRU尾部,但是后续只要有操作,就会移动到LRU链表头部最近访问过的缓存页一定在LRU头部
之前加载进来,均有访问
innodb_random_read_ahead控制默认是OFF
数据页
预读机制
全表扫描
更新缓存页的数据变成脏页脏数据
数据页缓存哈希表(KEY)表空间号+数据页号=缓存页地址(VALUE)(KEY)表空间号+数据页号=缓存页地址(VALUE)(KEY)表空间号+数据页号=缓存页地址(VALUE)
表,行,列
默认大小128MB可以修改参数:innodb_buffer_pool_size=2147483648(2G)
Buffer pool缓存区内13个连续的数据页且被频繁访问
超出阈值,把下一个相邻区所有的数据页加载缓存
磁盘
根据LRU,把尾部节点两个缓存页刷入磁盘,腾出空间
默认情况缓存页大小和磁盘上一个数据页大小一一对应,都是16K
缓存命中率低
从磁盘加载一个数据页的时候,可能连带把这个数据页相邻的其他数据页加载到缓存中
缓存命中率高:比如100次请求,30次的数据操作,都在缓存数据里
表空间,数据页
被修改过的缓存页的描述数据块
合理:把第二个通过预读机制加载进来的缓存页刷入磁盘并清空
参数:innodb_random-read_ahead默认是关闭
描述数据≈缓存页大小*5%
碎片
默认大小:16KB
必须把一个缓存页里被修改过的数据,刷到磁盘的数据页里,然后缓存页清空
尾部节点
flush链表
刚加载进来频繁被访问的
SELECT * FROM USERS
free链表
缓存命中率低:比如100次请求,1次的数据操作,都在缓存数据里,那么大部分还是要走磁盘查询
把这个区里的其他数据页都加载到缓存
头部节点
只要加载数据就把缓存页放入LRU链表头部
淘汰缓存页
物理概念
0 条评论
下一页