MySQL为什么要改进LRU算法?

LRU算法是一种常见的缓存淘汰策略,新数据从链表头部加入,释放空间时淘汰末尾数据。然而,全表扫描可能导致热数据被淘汰,预读机制也可能影响数据分布。改进型LRU将链表分为new和old两部分,新数据从中间插入,通过时间阈值决定数据在冷热数据区间的转换,此过程由innodb_old_blocks_time参数控制。
摘要由CSDN通过智能技术生成

普通LRU算法

LRU算法介绍

LRU = Least Recently Used(最近最少使用):也就是末尾淘汰法,新数据从链表头部加入,释放空间时从末尾淘汰数据。

1.当要访问某个页时,如果不在Buffer Pool中,需要把该页加载到缓冲池,并且把该缓冲页对应的控制块作为节点添加到LRU链表的头部。

2.当要访问某个页时,如果在Buffer Pool中,则直接把该页对应的控制块移动到LRU链表的头部。

3.当需要释放空间时,直接从末尾淘汰。

普通LRU算法的优缺点

优点:

        1.所有最近使用的数据都在链表表头,最近未使用的数据都在链表表尾,保证热数据能最快被获取到。

缺点:

        1.如果发生全表扫描(如使用select * 等),则有很大可能将真正的热数据淘汰掉。

        2.由于MySQL中存在预读机制,很多预读的页都会被放到LRU链表的表头。如果这些预读的页都没有使用到的话,就会导致很多尾部的缓冲页很快被淘汰掉。

改进型LRU算法

改进型LRU:将链表分为new和old两个部分,在添加新数据时并不是从表头插入,而是从中间midpoint位置插入数据(也就是从磁盘中新读出的数据会放在冷数据区的头部),如果数据很快就被访问了,那么page就会移动到new链表头部,如果数据没有被访问,会逐步向old尾部移动,直到淘汰。

冷数据区的数据页什么时候会被转到热数据区呢?

1.如果该数据页在LRU链表中存在的时间超过1s,就将其移动到链表头部(链表指的是整个LRU链表)

2.如果该数据页在LRU链表中存在的时间短于1s,其位置不变(由于全表扫描有一个特点,就是它对某个页的频繁访问总耗时会很短)

3.1s这个时间是由参数 innodb_old_blocks_time 控制的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值