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

1、定时把LRU尾部的部分缓存页刷入磁盘
并不是在缓存页满的时候,才会挑选LRU冷数据区域尾部的几个缓存页刷入磁盘,而是有一个后台线程,会运行一个定时任务,这个定时任务每隔一段时间就会把LRU链表的冷数据区域的尾部的一些缓存页,刷入磁盘里去,清空这几个缓存页,把他们加入回free链表去,所以实际上在缓存页没用完的时候,可能就会清空一些缓存页了。

2、把flush链表中的一些缓存页定时刷入磁盘
后台线程同时也会在MySQL不怎么繁忙的时候,找个时间把flush链表中的缓存页都刷入磁盘中,这样被修改过的数据,迟早都会刷入磁盘,只要flush链表中的一波缓存页被刷入了磁盘,那么这些缓存页也会从flush链表和Iru链表中移除,然后加入到free链表中去。

MySQL实际运行模式:

一边不停的加载数据到缓存页里去,不停的查询和修改缓存数据,然后free链表中的缓存页不停的在减少,flush链表中的缓存页不停的在增加,Iru链表中的缓存页不停的在增加和移动。
另外一边,后台线程不停的在把Iru链表的冷数据区域的缓存页以及flush链表的缓存页,刷入磁盘中来清空缓存页,然后flush链表和Iru链表中的缓存页在减少,free链表中的缓存页在增加。