(1)脏页为什么会脏?
首先脏页其实就是磁盘的数据页和Buffer Pool缓存里对应的缓存页数据不一致,这个时候我们就说缓存页就是脏数据,脏页。
(2)哪些是脏页?
有些数据页仅是查询的可能就跟根本没修改过,还有些在内存里更新的脏页,被刷回磁盘文件的那些缓存页。所以数据库里引入另外一个跟free链表类似的flush链表,这个链表本质也是通过缓存页的描述数据块的两个指针,让被修改过的缓存页的描述数据块,组成一个双向链表。
凡是被修改过的缓存页,都会把它的描述数据块放入到flush链表中去,flush链表的数据结构几乎和free链表一致。当你更新缓存页的时候,通过变换缓存页中的描述数据块的flush链表的指针,就可以把脏页的描述数据块组成一个双向链表,也就是flush链表,而且flush链表的基础节点会指向起始节点和尾节点。通过这个flush链表,就可以记录下来哪些缓存页是脏页了。
(Flush链表实际存放的都是脏页数据,即被修改过缓存页)
磁盘的两个数据页都是相邻的,加载到Buffer Pool也是相邻的