PostgreSQL(十三)检查点管理

本文详细解释了PostgreSQL中的检查点在数据持久化、实例恢复和介质恢复中的作用,介绍了检查点的工作原理,包括XLOG记录和检查点记录的位置。同时阐述了检查点的触发机制,如定时、被动和手动触发,以及如何管理和调整检查点相关参数以优化性能和可用性。
摘要由CSDN通过智能技术生成

一、检查点的作用

1、定期保存修改过的数据块

       检查点发生时,checkpoint进程会把共享缓冲区中的脏块写入磁盘,永久保存,以防主机断电等故障导致的数据丢失。此频率由参数checkpoint_timeout控制。

2、作为实例恢复的起点

       当实例发生崩溃后,再次启动需进行实例恢复,此时数据库将以最近一次ckpt的位置作为参考,开始recovery。

3、作为介质恢复的起点

       每次物理备份时都会生成一个检查点,用于判断将来恢复时的起点。

        因为备份时数据文件存在先后顺序,导致备份得到的数据文件不一致,所以将来恢复时,需要应用归档日志使其同步,此时,开始备份的位置就是将来recovery的位置。

二、检查点的工作原理

1、XLOG写记录

在pg中,xlog记录即事务记录,而检查点记录也是一次事务记录。

2、检查点记录的位置

(1)控制文件

控制文件中记录了检查点的相关信息。查看方式:
 

cd /usr/pgsql-14/bin
./pg_controldata  /data/postgresql/data
-bash-4.2$ ./pg_controldata /data/postgresql/data/
pg_control 版本:                      1300
Catalog 版本:                         202107181
数据库系统标识符:                     7205807020200909141
数据库簇状态:                         在运行中
pg_control 最后修改:                  2024年02月27日 星期二 16时10分01秒
最新检查点位置:                       2/78000098
最新检查点的 REDO 位置:               2/78000060
最新检查点的重做日志文件:              000000010000000200000078
最新检查点的 TimeLineID:               1
最新检查点的PrevTimeLineID:           1
最新检查点的full_page_writes:           开启
最新检查点的NextXID:                  0:31851
最新检查点的 NextOID:                 25018
最新检查点的NextMultiXactId:            1
最新检查点的NextMultiOffsetD:           0
最新检查点的oldestXID:                 727
最新检查点的oldestXID所在的数据库:   1
最新检查点的oldestActiveXID:            31851
最新检查点的oldestMultiXid:             1
最新检查点的oldestMulti所在的数据库:  1
最新检查点的oldestCommitTsXid:         0  
最新检查点的newestCommitTsXid:        0
最新检查点的时间:                     2024年02月27日 星期二 16时10分00秒
不带日志的关系: 0/3E8使用虚假的LSN计数器
最小恢复结束位置: 0/0
最小恢复结束位置时间表: 0
开始进行备份的点位置:                       0/0
备份的最终位置:                  0/0
需要终止备份的记录:        否
wal_level设置:                    replica
wal_log_hints设置:        关闭
max_connections设置:   100
max_worker_processes设置:   8
max_wal_senders设置:              10
max_prepared_xacts设置:   0
max_locks_per_xact设置:   64
track_commit_timestamp设置:        关闭
最大数据校准:     8
数据库块大小:                         8192
大关系的每段块数:                     131072
WAL的块大小:    8192
每一个 WAL 段字节数:                  16777216
标识符的最大长度:                     64
在索引中可允许使用最大的列数:    32
TOAST区块的最大长度:                1996
大对象区块的大小:         2048
日期/时间 类型存储:                   64位整数
正在传递Flloat8类型的参数:                   由值
数据页校验和版本:  0
当前身份验证:            6bbb8bf76be8da94e12cd62db6a6149536ed8f1aa76033d2bf52d27d22cc5694

(2)WAL文件

详见十一章、wal日志管理

3、检查点作为recovery起始位置的工作原理

三、检查点的触发机制

1、定时触发

由参数checkpoint_timeout设置,缺省300秒(5min);

2、被动触发

pg_xlog(v9.5及以上)& pg_wal(v10及以上)目录下的wal文件总大小超过参数max_wal_size的值,缺省1024MB、64个16MB文件;

pg数据库在smart或fast模式下正常关闭;

3、手动触发

四、检查点的管理及调整

1、检查点调整原则

检查点发生的间隔时间决定了实例恢复需要的时长

checkpoint timeout设置的值应该根据业务的需求设置,以实例崩溃时,下一次打开数据库时长的容忍度而设置;

(1)间隔时间,则实例恢复需要的时间就短,可提高数据库的可用性,但是会增加l/O操作,降低数据库状态性能,检査点发生时属于密集型l/O操作,会占用大量系统资源;

(2)间隔时间,则实例恢复需要的时间就长,会降低数据库的可用性,但是会减少I/O操作,提高数据库状态性能。

2、相关参数

       (1)checkpoint_timeout

       (2)checkpoint_completion_target:控制每次检查点发生时的I/O吞吐量

       值越,I/O占用资源越少,数据库性能越好;

       值越,I/O占用资源越多,数据库性能越差,但检查点完成速度越快(值越小,要求检查点写的越快);

        常与checkpoint_timeout配合使用。

        例如:

计算公式:单次写入数据量/(参数2值*参数1值*60s)*磁盘I/O速度*1024MB

举例:实际数据写入速度=100G/(0.9*5min*60s) *1G*1024  约等于380M/s

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值