缓冲区管理

本文介绍数据库缓冲区管理器的工作原理及两种常用算法:LRU和LIRS。LRU淘汰最长时间未访问的页面,而LIRS通过两级缓存区分冷热数据,减少全表扫描引起的缓存污染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缓冲区管理器负责将可用的内存划分为缓冲区,缓冲区是与页面同等大小的区域,磁盘块的内容可以传递到缓冲区。

常用的两种算法:

1)LRU

LRU算法是淘汰最长时间没有读或者写过的块。这种方法要求缓冲区管理器按照页面最后一次被访问的时间组成一个链表,每次淘汰链表尾部的页面。

2)LIRS

LRU算法不能解决全表扫描的问题,将导致缓冲池中的大量页面被替换,从而污染缓冲池。现代数据库一般采用LIRS算法,将缓冲池分为两级,数据首先进入第一级,如果数据在较短的时间内被访问两次或者两次以上,则成为热点数据进入第二级,第一级内部还是采用LRU算法。Oracle的数据中的Touch count算法和MySql InnoDB中的替换算法使用类似的分级思想。以MySql InnoDB为例子,LRU链表分为两部分:新子链表和老子链表。默认情况下,前者占用5/8,后者占用3/8。页面首先插入老子链表,页面在老子链表停留的时间超过一定阈值,才能会转移到新链表。当出现全表扫描的时候,InnoDB会将页面数据载入到老子链表,在老子链表中停留时间不够,不会转移到新子链表中,避免了新子链表中的页面被替换出去的情况。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值