网站大量收购闲置独家精品文档,联系QQ:2885784924

从0开始带你成为MySQL实战高手20 对于LRU链表中尾部的缓存页,是如何淘汰他们刷入磁盘的.pdfVIP

从0开始带你成为MySQL实战高手20 对于LRU链表中尾部的缓存页,是如何淘汰他们刷入磁盘的.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

图文20对于LRU链表中尾部的缓存页,是如何淘汰他们刷入磁盘的?手机观看

607人次阅读2020-02-1309:25:34

详情评论

对于LRU链表中尾部的缓存页,是如何淘汰他们刷入磁盘的?

如何提问:每篇文章都有评论区,大家可以尽情留言提问,我会逐一答疑

如何加群:购买狸猫技术窝专栏的小伙伴都可以加入狸猫技术交流群,一个非常纯粹的技术交流的地方

具体加群方式,请参见目录菜单下的文档:《MySQL专栏付费用户如何加群》(购买后可见)

1、BufferPool的缓存页以及几个链表的使用回顾

接着我们来讲讲,你的BufferPool在运行中被使用的时候,实际上会频繁的从磁盘上加载数据页到他的缓存页里去,

然后free链表、flush链表、lru链表都会在使用的时候同时被使用

比如数据加载到一个缓存页,free链表里会移除这个缓存页,然后lru链表的冷数据区域的头部会放入这个缓存页。

然后如果你要是修改了一个缓存页,那么flush链表中会记录这个脏页,lru链表中还可能会把你从冷数据区域移动到热

数据区域的头部去。

如果你是查询了一个缓存页,那么此时就会把这个缓存页在lru链表中移动到热数据区域去,或者在热数据区域中也有

可能会移动到头部去。

总之,MySQL在执行CRUD的时候,首先就是大量的操作缓存页以及对应的几个链表。然后在缓存页都满的时候,必

然要想办法把一些缓存页给刷入磁盘,然后清空这几个缓存页,接着把需要的数据页加载到缓存页里去!

我们已经知道,他是根据LRU链表去淘汰缓存页的,那么他到底是什么时候把LRU链表的冷数据区域中的缓存页刷入磁

盘的呢?实际上他有几个时机。

2、定时把LRU尾部的部分缓存页刷入磁盘

首先第一个时机,并不是在缓存页满的时候,才会挑选LRU冷数据区域尾部的几个缓存页刷入磁盘,而是有一个后台

线程,他会运行一个定时任务,这个定时任务每隔一段时间就会把LRU链表的冷数据区域的尾部的一些缓存页,刷入

磁盘里去,清空这几个缓存页,把他们加入回free链表去!

所以实际上在缓存页没用完的时候,可能就会清空一些缓存页了,我们看下面的图示。

所以大家会发现,只要有这个后台线程定时运行,可能你的缓存页都没用完呢,人家就给你把一批冷数据的缓存页刷

入磁盘,清空出来一批缓存页,那么你就多了一批可以使用的空闲缓存页了!

所以如果在一个动态的运行效果中思考,大概就是你不停的加载数据到一些空闲的缓存页里去,然后这些缓存页可能

被使用,会在lru链表中各种移动。然后同时有一个后台线程还不停的把冷数据区域的一些不用的缓存页刷入磁盘中,

清空一些缓存页出来。

只要有缓存页被刷人磁盘,大家可以想象一下,那么这个缓存页必然会加入到free链表中,从flush链表中移除,从lru

链表中移除。

3、把flush链表中的一些缓存页定时刷入磁盘

如果仅仅是把LRU链表中的冷数据区域的缓存页刷入磁盘,大家觉得够吗?

明显不够啊,因为在lru链表的热数据区域里的很多缓存页可能也会被频繁的修改,难道他们永远都不刷入磁盘中了

吗?

所以这个后台线程同时也会在MySQL不怎么繁忙的时候,找个时间把flush链表中的缓存页都刷入磁盘中,这样被你修

改过的数据,迟早都会刷入磁盘的!

只要flush链表中的一波缓存页被刷入了磁盘,那么这些缓存页也会从flush链表和lru链表中移除,然后加入到free链表

中去!

所以你可以理解为,你一边不停的加载数据到缓存页里去,不停的查询和修改缓存数据,然后free链表中的缓存页不停

的在减少,flush链表中的缓存页不停的在增加,lru链表中的缓存页不停的在增加和移动。

另外一边,你的后台线程不停的在把lru链表的冷数据区域的缓存页以及flush链表的缓存页,刷入磁盘中来清空缓存

页,然后flush链表和lru链表中的缓存页在减少,free链表中的缓存页在增加。

这就是一个动态运行起来的效果!

4、实在没有空闲缓存页了怎么办?

那么实在没有空闲缓存页了怎么办呢?

此时可能所有的free链表都被使用了,然后flush链表中有一大堆被修改过的缓存页,lru链表中有一大堆的缓存页,根

据冷热数据进行了分离,大致是如此的效果。

这个时候如果要从磁盘加载数据页到一个空闲缓存页中,此时就会从LRU链表的冷数据区域的尾部找到一个缓存页,

他一定是

您可能关注的文档

文档评论(0)

奎奎 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档