专注,勤学,慎思。戒骄戒躁,谦虚谨慎

just do it

导航

PostgreSQL中checkpoint的作用和工作原理

###checkpoint的作用
将脏页写入磁盘,避免数据库实例重启之后需要从WAL中恢复大量的数据而增加数据库恢复时间

 

###checkpoints的触发时机
1,手动CHECKPOINT命令;
2,pg_basebackup,CREATE DATABASE,或pg_ctl stop|restart;
3,定期执行的checkpoint,也即每隔checkpoint_timeout定时执行的,默认值为300秒
4,自上一个检查点以来生成了已配置的最大WAL文件数量,属于被动checkpoint

 

###checkpoint触发时的执行步骤
1,识别共享缓冲区中的所有脏页(已修改的页);
2,将所有这些缓冲区写入磁盘(或更确切地说,写入文件系统缓存);
3,调用fsync()将所有修改后的文件刷新到磁盘(数据文件)。

 

###checkpoint的执行时间参数
checkpoint执行时主要是物理IO操作,这是一个比较耗时的操作,PostgreSQL尽可能在checkpoint_timeout*checkpoint_completion_target这个时间范围内完成物理IO操作。
也就是说,只要在规定的时间内完成本次物理IO操作即可,checkpoint_completion_target是一个介于0到1的一个比例,默认值是0.5,那么在 checkpoint 操作的前 50% 时间内,PostgreSQL 会尽量将缓冲区的脏页写入磁盘,这样避免了在 checkpoint 结束时产生突发的 I/O 高峰。

 

checkpoint相关的系统表字段的含义,来自于:https://www.cnblogs.com/abclife/p/14573514.html

=#select * from pg_stat_bgwriter;
-[ RECORD 1 ]---------+-----------------------------
checkpoints_timed     | 15462                       #计划检查点的发生次数,这种检查点是checkpoint_timeout参数规定的超时达到后系统启动的checkpoint;
checkpoints_req       | 148                         #被动checkpoint,非计划检查点的次数,包含手动的检查点、xlog(redo日志)检查点(指当某些数据库预定的阈值达到时启动的检查点,比如WAL已经超出了max_wal_size或者checkpoint_segments,也会触发xlog ckpt)
checkpoint_write_time | 2130524730                  #检查点写入的总时长
checkpoint_sync_time  | 72082                       #检查点同步文件的总时长
buffers_checkpoint    | 174657791                   #检查点清理的脏块
buffers_clean         | 0                           #bgwriter清理的脏块数量
maxwritten_clean      | 0                           #bgwriter清理脏块的时候达到bgwriter_lru_maxpages后终止写入批处理的次数,为了防止一次批量写入太大影响数据块IO性能,bgwriter每次都有写入的限制。不过这个参数的缺省值100太小,对于负载较高的数据库,需要加大;
buffers_backend       | 24491898                    #backend清理的脏块数量
buffers_backend_fsync | 2                           #backend被迫自己调用fsync来同步数据的计数,如果这个计数器不为零,说明当时的fsync队列已经满了,存储子系统肯定出现了性能问题;
buffers_alloc         | 51275374                    #buffer分配的次数
stats_reset           | 2021-01-29 14:41:48.97647+08 #上一次RESET这些统计值的时间
 
=#

 

 

参考:
https://guobo507.github.io/2020/basic-tuning-of-checkpoint/
https://www.cnblogs.com/abclife/p/14573514.html
https://cloud.tencent.com.cn/developer/article/1882199

posted on 2024-10-31 20:11  MSSQL123  阅读(42)  评论(0编辑  收藏  举报