一、回顾
mysql启动后buffer pool会初始化。buffer pool也会初始化好n多个空白的缓存页,以及它们的描述数据会被组织成lru链表以及freelist 双向链表。
这时你从磁盘中读取一个数据页,会先从free list中找出一个空闲缓存页的描述信息,然后将你读出的数据页中加载进缓存页中。同时将缓存页的描述信息从free list中剔除,此外该描述信息块还会被维护进lru链表中。
数据页被加载进buffer pool后你就可以对其进行变更操作了。
二、flush list
为了加快响应客户端的速度,mysql会在buffer pool中对数据进行修改,可是一旦你对lru链表中的缓存页做了修改,那该页中的数据和磁盘中的数据页信息就不一致了!大家一般管这种数据页叫做脏页。
为了保证数据的最终一致性,mysql是需要将脏页刷新回磁盘的!
但是问题是:需要将哪些数据页刷新回磁盘呢?
这就引出了flush list~
flush list 和 free list很像,都是由buffer pool中数据描述信息组织而成的双向链表。
一旦你对内存中的缓冲页作出了修改,那该缓冲页对应的描述信息块就会添加进 flush list。这样当buffer pool中的数据页不够用时,我们就可以优先将 flush list中的脏数据页刷新进磁盘中。
如果你读了前几篇文章那你肯定知道