现象
在一次备份遇到一个问题,就是远程使用pg_basebackup进行备份的时候一直卡在waiting for checkpoint。
原因
因为pg_basebackup在备份的时候会调用
SELECT pg_backup_start(label => 'label', fast => false);
pg_backup_start默认情况下的fast = > false,意味着需要等待下一次检查点的完成,这可能需要等待很长的时间。如果想要尽快的开始备份,那么fast参数的值应该要设置为true。
文档说明如下:
在pg_basebackup中,检查点的默认模式是spread,那就意味着使用pg_backup_start(label => 'label', fast => false);的模式进行备份,所以可能需要等待较长的时间。
General options:
-c, --checkpoint=fast|spread
set fast or spread checkpointing
解决
在调用pg_basebackup中使用-c fast
$ pg_basebackup -h vm001 -U postgres -p 2023 -D $PGDATA -Fp -Xs -P -R -c fast