checkpoint是一个数据库事件,它将已修改的数据从高速缓存刷新到磁盘,并更新控制文件和数据文件,此时会有大量的I/O写操作。
在PostgreSQL中,检查点(后台)进程执行检查点;当发生下列情况之一时,其进程将启动:
- 检查点间隔时间由checkpoint_timeout设置(默认间隔为300秒(5分钟))
- 在9.5版或更高版本中,pg_xlog中WAL段文件的总大小(在10版或更高版本中为pg_WAL)已超过参数max_WAL_size的值(默认值为1GB(64个16MB文件))。
- PostgreSQL服务器在smart或fast模式下关闭。
- 手动checkpoint。
这里我们主要关注自动触发的情况,所以最后两种情况并不关注。由于没有增量检查点的概念,在pg中,当检查点触发的时候,会触发明显的抖动,如下:
从lightdb 23.2开始,正式支持增量检查点机制。启用增量检查点后,运行曲线如下:
虽然通过优化相关参数,也能达到比较接近的效果,但是完全依赖于DBA和精细调优的结果。而采用增量检查点,该过程完全自动化了,大大提升了数据库的自治性。
其由下列参数控制:
enable_incremental_checkpoint,是否启用增量检查点,默认:off
incre_checkpoint_timeout:增量检查点模式下检查点的触发间隔
log_pagewriter:是否在PageWriter内打印日志
enable_candidate_buf_usage_count:是否在管理页面空闲队列时考虑页面的usage count
enable_double_write=off ,是否启用双写,默认:off。如果未启用增量检查点,该参数无效。
dw_file_num:双写文件的数量
dw_file_size: 每个双写文件的大小
max_io_capacity:用户预估的磁盘I/O带宽
pagewriter_thread_num:PageWriter子进程的数量
pagewriter_sleep:PageWriter刷页的间隔