langjitianyaluotongxue

导航

15 当Buffer Pool中的缓存页不够的时候,如何基于LRU算法淘汰部分缓 存?

1.哪些缓存页是脏页?

最终在内存里更新的数据,都是要被刷回磁盘的,不可能所有的缓存页都被刷回磁盘,因为有的缓存页是查询时被读取到Buffer Pool中的,从来没有被修改过,所以数据库引入了一个和free链表类似的flush链表,凡是被修改过的缓存页,都会把他的描述数据块加入到flush链表,flush的意思这些都是脏页,后期都是要被刷到磁盘的。

2.如果Buffer Pool 中的缓存页不够了怎么办?

当执行crud的时候,数据页都会加载到缓存页,加载数据页到缓存页会找空闲的缓存页,当缓存页用完了怎么办?要淘汰哪些缓存页数据,淘汰谁?

比如当前所有的缓存页都被塞了数据,无法从磁盘上加载新的数据到缓存页,此时只能淘汰缓存页一部分数据,此时引入一个LUR链表来判断哪些缓存页是不常用的。这个所谓的LRU就是Least Recently Used,最近最少使用的意思。

LRU链表的工作原理:假设我们从磁盘加载数据到缓存页,这时就会把缓存页的描述数据块放到LRU链表头部,假设后期查询或者修改了这个数据,他就会进入到LRU链表的头部,也就是说最近被访问的都会在头部位置,不常访问的都会在尾部,当缓存页没有空闲的时候,当磁盘的数据页要加载到空闲缓存页时,这时会把LUR链表尾部的缓存页刷到磁盘里,并把需要的磁盘数据页加载到腾出来的空闲缓存页中就可以了

posted on 2022-09-19 15:58  浪迹天涯骆同学  阅读(25)  评论(0编辑  收藏  举报