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增量检查点特性及稳定性测试_数据库

 

从lightdb 23.2开始,正式支持增量检查点机制。启用增量检查点后,运行曲线如下:

lightdb增量检查点特性及稳定性测试_PostgreSQL_02

 

 虽然通过优化相关参数,也能达到比较接近的效果,但是完全依赖于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刷页的间隔