mysql buffer pool 3列表

3 篇文章 0 订阅

1. freelist

freelist 标记的是buffer pool中未被使用区域的页列表,当有新的查询到来,查询结果有新的页数据时,会先从freelist中找到未被使用的页区域,然后将查询结果页放入该区域,并从freelist中删除该页标记。

2 flushlist

当buffer pool中的页里面有数据被修改,则该页变为脏页,数据库并不会立即将该页数据修改后的结果立即持久化到磁盘,而是会将该页标记加入flushlist的中(最前面),mysql后台线程会定时将flushlist标记的buffer pool中的脏页进行持久化到磁盘,持久化后删除flushlist节点

3 lru

a. buffer pool大小总有上限,当mysql一直查询总会超过其大小,这时候就需要有内存淘汰机制来保证buffer pool不会溢出,lru就是为了淘汰使用频率最小和使用时间最久远的页而生,当新增查询,有新的页缓存到buffer pool中时,就会将新的页标记放入lru列表的最前面,当buffer pool不够时,就会从lru列表最后面进行淘汰。

b. 为了防止全表扫描等容易对buffer pool影响很大的查询操作,mysql将 lrm列表分为热数据区和冷数据区,热冷分表赞比5/8和3/8. 当查询结果页第一次被查询时,会将该页标记放入冷数据区,当第二次查询该页时如果两次查询的时间差大于1s(全表扫描时,同一页的数据前后时间差很短,远小于1s),则将该页的标记放入热数据区,这样做防止了全表扫描对整个buffer pool进行刷新覆盖。

 

4. 三种列表的数据结构如下图,都是包含 基节点和控制块节点

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值