MySQL - Buffer Pool介绍(二)

本文详细介绍了MySQL的Buffer Pool机制,包括更新数据时flush链表的作用,缓存页不足时的处理方式,LRU机制的隐患及其优化。通过冷热数据分离策略,MySQL解决了预读和全表扫描可能导致的问题,确保更有效地管理缓存页,避免频繁淘汰真正被频繁访问的页面。
摘要由CSDN通过智能技术生成

1. 更新Buffer Pool中的数据时flush链表的作用是什么?

当我们在执行增删改查的时候,如果发现数据页没有被缓存,一定会基于free链表找到一个空闲的缓存页,然后将数据页读取到缓存页里,如果已经缓存了,就直接使用缓存页;无论怎样,都是在内存中直接执行增删改操作的。

一旦更新了缓存页中的数据,那缓存页中的数据和磁盘上的数据就不一致了,这个时候这个缓存页就是脏数据、脏页了

Buffer Pool中的脏缓存页最终是要被刷新回磁盘文件的,那刷新的时候,需要知道哪些缓存也需要被刷新,不会所有缓存页都刷新

数据库里面引入了一个和free链表类似的flush链表,本质也是通过缓存页的描述数据块中的两个指针,让被修改过的缓存页的描述数据块组成一个双向链表。

凡是被修改过的缓存页,都会把他的描述数据块加入到flush链表中去,flush的意思就是这也都是脏页,后续都是要flush刷新到磁盘上去的。

2. Buffer Pool中的缓存页不够用怎么办?

基于LRU算法淘汰缓存页,从磁盘加载一个数据页到缓存页的时候,这个缓存页的描述数据块会被放到LRU链表的头部,所以所有有数据的缓存页都会在LRU链表中,最近被加载的缓存页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无法无天过路客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值