1、什么是checkpoint
将缓冲池中的脏页刷新到磁盘,并更新redo log的checkpoint位点,确保数据库在发生故障时可以快速恢复到一致的状态。
2、checkpoint执行过程
- 确保需要刷新的脏页:从缓冲池中选取一部分需要刷新的页
- 数据页刷新:将选定的脏页写入磁盘文件
- 更新redo log的checkpoint位置:释放redo log旧空间,使其可以被新事务复用
3、InnoDB支持的checkpoint类型
- sharp checkpoint(尖锐检查点):在数据库关闭时,一次性将所有脏页刷新到磁盘,并更新数据文件,使其处于一致性状态。
- fuzzy checkpoint(模糊检查点):只会将部分脏页刷新到磁盘。
4、checkpoint主要作用
- 缩短数据库崩溃时的恢复时间:只需从最近checkpoint位置恢复,不必重做所有redo log
- 释放redo log日志盘空间:防止日志盘写满
- 缓解缓冲池大小:缓冲池不够时将脏页刷到磁盘
- 优化IO负载:逐步刷脏页,减少磁盘IO压力,防止IO突发
5、checkpoint触发条件
主动执行:
- redo log日志盘满了,需要触发checkpoint释放redo log空间
- 手动触发flush tables
- mysql正常关闭时触发
被动执行:
- 缓冲池中脏页比例达到参数值
- 自适应刷新算法:通过跟踪缓冲池中脏页数量和生成重做日志记录的速率决定从缓冲池中清除多少脏页