基础备份compress子项的几种新用法

来源:这里教程网 时间:2026-03-14 21:17:36 作者:

pg_basebackup是一个非常简便快速的基础备份工具,它可以对整个实例做物理备份,常用于搭建流复制环境或恢复新的备份实例。

PostgreSQL 15对pg_basebackup的compress子项做了一些增强,主要包括:

  • 新增lz4和zstd(Zstandard)方法,支持服务端及客户端的lz4和zstd压缩;
  • compress子项可控制压缩方法及压缩选项;
  • zstd压缩可使用多线程workers并行处理;
  • 文本备份方式可在服务端压缩后传输到客户端解压;

    compress子项可以指定压缩方法和压缩级别,语法如下:

    --compress=[{client|server}-]METHOD[:DETAIL]

    PostgreSQL 15之前的版本只能设置压缩级别,压缩级别通过在冒号(:)后直接使用数字或者指定"level=number"来指定,对于zstd压缩,还可以设置"workers=number"并行处理的工作线程数。

    具体使用示例如下:

    环境准备

    本文测试环境使用虚拟机Centos7.6 1G物理内存测试PostgreSQL 15.0,并使用老朋友pgbench进行灌数。

    pgbench --initialize --scale=100

    初始化因子设置为100, 测试的主表pgbench_accounts数据为一千万行,磁盘空间大约占1.3GB。

    下面分别使用不同的备份格式测试不同的压缩方式。

    一、使用文本格式,不压缩

    $ pg_basebackup  -Fp  --compress=none  -D data

    时间花销:56s,空间占用:1.5GB

    二、使用tar包格式,gzip压缩

    $ pg_basebackup  -Ft  --compress=gzip  -D data
    $ pg_basebackup  -Ft  --compress=client-gzip  -D data

    时间花销:38s,空间占用:84M B

    上面两种方式类似,客户端gzip压缩可以使用"client-gzip",或者简化为"gzip"。

    $ pg_basebackup  -Ft  --compress=server-gzip:5  -D data
    $ pg_basebackup  -Ft  --compress=server-gzip:level=5  -D data

    时间花销:27s,空间占用:100M B

    服务端gzip压缩可以使用"server-gzip",压缩级别可以直接在冒号后使用数字,或者使用"level=5"来指定,压缩级别的范围是1到9,数字越大,压缩率越高。

    三、使用tar包格式,lz4压缩

    lz4压缩比gzip压缩速度更快一些,但压缩率不如gzip,如果期望速度更快,可以使用lz4替代gzip。

    $ pg_basebackup  -Ft  --compress=server-lz4:5  -D data
    $ pg_basebackup  -Ft  --compress=server-lz4:level=5  -D data

    时间花销:26s,空间占用:167M B

    服务端lz4压缩可以使用"server-lz4",压缩级别的写法与前面类似,也是两种写法,压缩级别的范围是1到12,数字越大,压缩率越高。

    四、使用tar包格式,zstd压缩

    zstd压缩结合了gzip与lz4压缩的优点,不仅速度快,压缩率也高,同时还支持使用多个zstd workers并行备份数据,如果CPU比较充足,zstd是很好的性能提升方式。

    $ pg_basebackup  -Ft  --compress=server-zstd:level=5,workers=1  -D data

    时间花销:26s,空间占用:84M B

    五、使用文本格式,lz4压缩

    如果不喜欢用tar包格式,因为tar包备份的格式无法直接使用pg_verifybackup来校验备份数据的完整性,使用文本格式备份也能进行服务端压缩,然后客户端自动解压。

    $ pg_basebackup  -Fp  --compress=server-lz4  -D data

    时间花销:50s,空间占用:1.5GB

    使用文本格式备份时虽然压缩并没有给我们带来任何性能收益,但是可以高效的传输数据,加速服务端的备份数据从网络传输到远程客户端存储上。当网络带宽较小时,这种方式会比较有用。

    总体来说,服务端的压缩加速比客户端要差一些,但是在网络带宽不好的情况下,可以在服务端压缩后再传输到客户端。

    保持联系

    本人组建了一个技术交流群:PG乐知乐享交流群。欢迎关注文章的小伙伴随缘加入,进群请加本人微信skypkmoon并备注PG乐知乐享。

  • 相关推荐