一、思想

数据的一致性:通过对比checkpoint、redo log和数据页中的LSN(Log Sequence Number)来保证数据的一致性。


二、目的

主要是为了解决以下3个问题
(1)buffer pool不够用时 -> 脏页刷盘
(2)redo log不够用时 -> redo log刷盘、脏页刷盘
(3)缩短数据库恢复时间


三、刷盘流程

  • start ckpt:将未提交的事务记录到Transaction Log中
    • ⟨start ckpt(T1,…,Tk)
  • 数据脏页刷盘
    • 将非事务终态(end)的数据刷盘:commit、un-commit
  • end ckpt:在Transaction Log中写入Checkpoint结束标记
    • ⟨end ckpt⟩


      image.png

四、分类

1、全量刷盘:Sharp Checkpoint

触发时机:数据库shutdown

2、部分刷盘:Fuzzy Checkpoint

触发时机

  • Master Thread Checkpoint

master thread 定时刷新。

  • FLUSH_LRU_LIST Checkpoint

LRU free list 空闲页不足100。

  • LRU flush list 数据脏页过多

当缓冲池中脏页的数量占据75%时,强制进行Checkpoint,刷新一部分的脏页到磁。

  • Async/Sync Flush Checkpoint

image.png