1、脏数据页到底为什么会脏?
在执行增删改的时候,如果发现数据页没缓存,那么必然会基于free链表找到一个空闲的缓存页,然后读取到缓存页里去,但是如果已经缓存了,那么下一次就必然会直接使用缓存页。
要更新的数据页都会在Buffer Pool的缓存页里,在内存中直接执行增删改的操作。此时一旦更新了缓存页中的数据,那么缓存页里的数据和磁盘上的数据页里的数据就不一致了,这个时候,我们就说缓存页是脏数据,脏页。
2、哪些缓存页是脏页呢?
最终这些在内存里更新的脏页的数据,都是要被刷新回磁盘文件的。但是不可能所有的缓存页都刷回磁盘的,因为有的缓存页可能是因为查询的时候被读取到Buffer Poo里去的,可能根本没修改过!
所以数据库在这里引入了另外一个跟free链表类似的flush链表,这个flush链表本质也是通过缓存页的描述数据块中的两个指针,让被修改过的缓存页的描述数据块,组成一个双向链表。凡是被修改过的缓存页,都会把它的描述数据块加入到flush链表中去,flush的意思就是这些都是脏页,后续都是要flush刷新到磁盘上去的。

