Mysql缓冲池中的lruList和lru算法

Mysql缓冲池中的lruList和lru算法

缓冲池:优化两种运行速度差距很大的介质之间交互的方法,例如在计算机中cpu比主内存的运行速度快的多,为了消除这种差距,就使用了cache的方式;在这里插入图片描述
主要思想:cpu在读数据时,首先会查询是否存在于缓存中,如果存在直接取出数据,如果不存在就去主内存中查找,找到顺便写回到缓存中,
写数据时,cpu会把数据直接写入到缓存。而缓存会在特定时间把需要写回主内存的数据一次性写入,这样提高了资源的利用率。有点类似于在生活中把一些东西集中起来处理的方式(例如在装载大量货物时,选择载重汽车来提高运输效率)

mysql缓冲池

mysql为了提高与磁盘的交互性,也创建了类似的缓冲池概念,而且mysql从磁盘调取数据的单位是页,一页=16KB,

mysql缓冲池在这里插入图片描述
从磁盘中调取数据页不能是无穷无尽的,因为太多的页占满mysql的内存空间,这时就需要一种调度算法来负责管理页面的调取和抛弃,而mysql选择的加强版的lru算法
lru(Least Recently Used)最近最久未使用算法:这种算法的淘汰机制就是在队列已经达到满的时候,会优先淘汰掉最近最久未使用的元素(这种算法一般存在于队列的末尾)。
lru工作流程:读取元素的时候会元素移动到队列的头部,在删除元素的时候总是在队列的尾部删除元素,添加元素的时候会添加到队列的头部
在这里插入图片描述

mysql lru

mysql在原来的lru的基础上进行了一部分改造,使得它更适合应用于其他的极端场景,具体就是在原来的lru列表中加入了midpoint位置,虽然新访问的页面并不是直接添加到队列的头部,而是放入midpoint的位置,在默认的配置下,该位置在lru列表的5/8处。
在这里插入图片描述

为什么不采用普通的lru列表

因为普通的lru列表中,某些sql操作可能会使缓冲池中的页被刷新出,从而影响缓冲池的效率。常见的这些操作就是索引或者数据的扫描操作,这类操作需要访问表中的许多页,甚至是全部的页,而这些页通常来说又仅仅在这次操作中需要,并不是热点数据,如果被放在首部,可能会导致热点数据被清除出列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值