15 当Buffer Pool中的缓存页不够的时候,如何基于LRU算法淘汰部分缓 存?
1.哪些缓存页是脏页?
最终在内存里更新的数据,都是要被刷回磁盘的,不可能所有的缓存页都被刷回磁盘,因为有的缓存页是查询时被读取到Buffer Pool中的,从来没有被修改过,所以数据库引入了一个和free链表类似的flush链表,凡是被修改过的缓存页,都会把他的描述数据块加入到flush链表,flush的意思这些都是脏页,后期都是要被刷到磁盘的。
2.如果Buffer Pool 中的缓存页不够了怎么办?
当执行crud的时候,数据页都会加载到缓存页,加载数据页到缓存页会找空闲的缓存页,当缓存页用完了怎么办?要淘汰哪些缓存页数据,淘汰谁?
比如当前所有的缓存页都被塞了数据,无法从磁盘上加载新的数据到缓存页,此时只能淘汰缓存页一部分数据,此时引入一个LUR链表来判断哪些缓存页是不常用的。这个所谓的LRU就是Least Recently Used,最近最少使用的意思。
LRU链表的工作原理:假设我们从磁盘加载数据到缓存页,这时就会把缓存页的描述数据块放到LRU链表头部,假设后期查询或者修改了这个数据,他就会进入到LRU链表的头部,也就是说最近被访问的都会在头部位置,不常访问的都会在尾部,当缓存页没有空闲的时候,当磁盘的数据页要加载到空闲缓存页时,这时会把LUR链表尾部的缓存页刷到磁盘里,并把需要的磁盘数据页加载到腾出来的空闲缓存页中就可以了
分类:
mysql优化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)