一、思想
数据的一致性:通过对比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结束标记
四、分类
1、全量刷盘:Sharp Checkpoint
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