- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
图文15当BufferPool中的缓存页不够的时候,如何基于LRU算法淘汰部分缓手机观看
存?
607人次阅读2020-02-1108:57:22
详情评论
当BufferPool中的缓存页不够的时候,如何基于LRU算法淘汰部分缓存?
如何提问:每篇文章都有评论区,大家可以尽情留言提问,我会逐一答疑
如何加群:购买狸猫技术窝专栏的小伙伴都可以加入狸猫技术交流群,一个非常纯粹的技术交流的地方
具体加群方式,请参见目录菜单下的文档:《MySQL专栏付费用户如何加群》(购买后可见)
1、如果BufferPool中的缓存页不够了怎么办?
之前我们已经给大家讲解了BufferPool中的缓存页的划分,包括free链表的使用,然后磁盘上的数据页是如何加载到
缓存页里去的,包括对缓存页修改之后,flush链表是如何用来记载脏数据页的。
今天我们接着来分析BufferPool的工作原理,我们来思考一个问题,当你要执行CRUD操作的时候,无论是查询数
据,还是修改数据,实际上都会把磁盘上的数据页加载到缓存页里来,这个大家都是没有问题的吧?
那么在加载数据到缓存页的时候,必然是要加载到空闲的缓存页里去的,所以必须要从free链表中找一个空闲的缓存
页,然后把磁盘上的数据页加载到那个空闲的缓存页里去,我们看下图的红色箭头的示意。
那么大家通过之前的学习肯定都知道了,随着你不停的把磁盘上的数据页加载到空闲的缓存页里去,free链表中的空闲
缓存页是不是会越来越少?因为只要你把一个数据页加载到一个空闲缓存页里去,free链表中就会减少一个空闲缓存
页。
所以,当你不停的把磁盘上的数据页加载到空闲缓存页里去,free链表中不停的移除空闲缓存页,迟早有那么一瞬间,
你会发现free链表中已经没有空闲缓存页了
这个时候,当你还要加载数据页到一个空闲缓存页的时候,怎么办呢?如下图。
2、如果要淘汰掉一些缓存数据,淘汰谁?
针对上述的问题,大家来思考下一个问题,如果所有的缓存页都被塞了数据了,此时无法从磁盘上加载新的数据页到
缓存页里去了,那么此时你只有一个办法,就是淘汰掉一些缓存页。
那什么叫淘汰缓存页呢?
顾名思义,你必须把一个缓存页里被修改过的数据,给他刷到磁盘上的数据页里去,然后这个缓存页就可以清空了,
让他重新变成一个空闲的缓存页。
接着你再把磁盘上你需要的新的数据页加载到这个腾出来的空闲缓存页中去,如下图。
那么下一个问题来了,如果要把一个缓存页里的数据刷入磁盘,腾出来一个空闲缓存页,那么应该把哪个缓存页的数
据给刷入磁盘呢?
3、缓存命中率概念的引入
要解答这个问题,我们就得引入一个缓存命中率的概念。
假设现在有两个缓存页,一个缓存页的数据,经常会被修改和查询,比如在100次请求中,有30次都是在查询和修改
这个缓存页里的数据。那么此时我们可以说这种情况下,缓存命中率很高
为什么呢?因为100次请求中,30次都可以操作缓存,不需要从磁盘加载数据,这个缓存命中率就比较高了。
另外一个缓存页里的数据,就是刚从磁盘加载到缓存页之后,被修改和查询过1次,之后100次请求中没有一次是修改
和查询这个缓存页的数据的,那么此时我们就说缓存命中率有点低,因为大部分请求可能还需要走磁盘查询数据,他
们要操作的数据不在缓存中。
所以针对上述两个缓存页,假设此时让你做一个抉择,要把其中缓存页的数据刷入到磁盘去,腾出来一个空闲的缓存
页,此时你会选择谁?
那还用想么,当然是选择第二个缓存页刷入磁盘中了!
因为第二个缓存页,压根儿就没什么人来使用他里面的数据,结果这些数据还空占据了一个缓存页,这不是占着茅坑
不拉屎么?
4、引入LRU链表来判断哪些缓存页是不常用的
接着我们就要解决下一个问题了,就是你怎么知道哪些缓存页经常被访问,哪些缓存页很少被访问?
此时就要引入一个新的LRU链表了,这个所谓的LRU就是LeastRecentlyUsed,最近最少使用的意思。
通过这个LRU链表,我们可以知道哪些缓存页是最近最少被使用的,那么当你缓存页需要腾出来一个刷入磁盘的时
候,不就可以选择那个LRU链表中最近最少被使用的缓存页了
您可能关注的文档
- 从0开始带你成为MySQL实战高手11 从数据的增删改开始讲起,回顾一下Buffer Pool在数据库里的地位.pdf
- 从0开始带你成为MySQL实战高手12 Buffer Pool这个内存数据结构到底长个什么样子.pdf
- 从0开始带你成为MySQL实战高手13 从磁盘读取数据页到Buffer Pool的时候,free链表有什么用.pdf
- 从0开始带你成为MySQL实战高手14 当我们更新Buffer Pool中的数据时,flush链表有什么用.pdf
- 从0开始带你成为MySQL实战高手16 简单的LRU链表在Buffer Pool实际运行中,可能导致哪些问题.pdf
- 从0开始带你成为MySQL实战高手17 MySQL是如何基于冷热数据分离的方案,来优化LRU算法的.pdf
- 从0开始带你成为MySQL实战高手18 基于冷热数据分离方案优化后的LRU链表,是如何解决之前的问题的.pdf
- 从0开始带你成为MySQL实战高手19 MySQL是如何将LRU链表的使用性能优化到极致的.pdf
- 从0开始带你成为MySQL实战高手20 对于LRU链表中尾部的缓存页,是如何淘汰他们刷入磁盘的.pdf
- 2025年家居收纳用品行业分析报告.docx
文档评论(0)