searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

pgBackRest工具调研

2023-10-17 08:00:32
108
0

1 背景介绍

PostgreSQL在数据集簇目录的pg_wal/子目录下都保持有一个预写式日志(WAL)。这个日志存在的目的是为了保证崩溃后的安全:如果系统崩溃,可以“重放”从最后一次检查点以来的日志项来恢复数据库的一致性。

WAL的存在进而产生了一种流行的备份数据库的策略:我们可以把一个文件系统级别的备份和WAL文件的备份结合起来。当需要恢复时,我们先恢复文件系统备份,然后从备份的WAL文件中重放来把系统带到一个当前状态。

如pg自带工具pg_basebackup进行备份,其manifest内容:

{ "PostgreSQL-Backup-Manifest-Version": 1,
"Files": [
{ "Path": "backup_label", "Size": 227, "Last-Modified": "2023-10-09 07:20:57 GMT", "Checksum-Algorithm": "CRC32C", "Checksum": "b4e8cb08" },
{ "Path": "tablespace_map", "Size": 0, "Last-Modified": "2023-10-09 07:20:57 GMT", "Checksum-Algorithm": "CRC32C", "Checksum": "00000000" },
……
{ "Path": "global/pg_control", "Size": 8192, "Last-Modified": "2023-10-09 07:20:57 GMT", "Checksum-Algorithm": "CRC32C", "Checksum": "43872087" }
],
"WAL-Ranges": [
{ "Timeline": 1, "Start-LSN": "1/73000028", "End-LSN": "1/73000100" }
],
"Manifest-Checksum": "4cc105203fb23172017af4df2437a1cd1f4e7ac59705652a31ee4062854d2d6e"}

但pg_basebackup存在一个问题:由于pg_basebackup无法并行备份和回档的缘故,在数据量变大后,会出现备份回档慢的问题。

因此,调研第三方pg备份工具pgBackRest,并关注其支持并行的功能。

2 pgBackRest工具

pgBackRest是一个PostgreSQL数据库备份和恢复的管理插件,支持完整备份、差异备份和增量备份。在提升备份效率上,其支持并行处理、异步归档等特性。v2.48 是当前的稳定版本。

2.0 基础配置

配置postgresql参数:/Yourpath/pg15/data/postgresql.conf

archive_command = 'pgbackrest --stanza=demo archive-push %p'
archive_mode = on
log_filename = 'postgresql.log'
max_wal_senders = 3
wal_level = replica

配置pgbackrest参数:/etc/pgbackrest/pgbackrest.conf

[demo] #节名称和节配置,与postgresql.conf中archive_command的stanza一致
pg1-path=/YourPath/pg15/data #需备份恢复的pgdata
pg1-port=6641 #pg端口号
pg1-user=YourName #pg用户名
[global] #全局配置
repo1-path=/var/lib/pgbackrest #存储库所在位置

创建节(备份仓库)

# 创建备份仓库
$ pgbackrest --stanza=demo --log-level-console=info stanza-create
# 检查备份仓库情况
$ pgbackrest --stanza=demo --log-level-console=info check
...
INFO: check command end: completed successfully (1122ms)

2.1 备份功能

2.1.1 备份方式

完全备份:完整数据库的完整副本,不依赖于任何其他备份。

差异备份:备份自上一次全量备份之后有变化的数据。

增量备份:备份自上一次备份(包含全量备份、差异备份、增量备份)之后有变化的数据。

增量备份是默认的备份类型,通常是时间和空间成本最低的备份类型。

# 备份命令
$ pgbackrest --stanza=demo --type=full/diff/incr --log-level-console=info backup

三种备份比较:

$ pgbackrest info
stanza: demo
    status: ok
    db (current)
        wal archive min/max (14): 000000050000000000000024/000000060000000000000031
​
        full backup: 20231010-150936F
            timestamp start/stop: 2023-10-10 15:09:36+08 / 2023-10-10 15:09:39+08
            wal start/stop: 000000050000000000000024 / 000000050000000000000024
            database size: 59.8MB, database backup size: 59.8MB
            repo1: backup set size: 59.8MB, backup size: 59.8MB
​
        diff backup: 20231010-150936F_20231010-152139D
            timestamp start/stop: 2023-10-10 15:21:39+08 / 2023-10-10 15:21:41+08
            wal start/stop: 00000006000000000000002F / 00000006000000000000002F
            database size: 63.7MB, database backup size: 6.4MB
            repo1: backup set size: 63.7MB, backup size: 6.4MB
            backup reference list: 20231010-150936F
​
        incr backup: 20231010-150936F_20231010-152223I
            timestamp start/stop: 2023-10-10 15:22:23+08 / 2023-10-10 15:22:26+08
            wal start/stop: 000000060000000000000031 / 000000060000000000000031
            database size: 67.2MB, database backup size: 5.8MB
            repo1: backup set size: 67.2MB, backup size: 5.8MB
            backup reference list: 20231010-150936F, 20231010-150936F_20231010-152139D

2.1.2 备份保留

最好保留尽可能多的备份,以便为时间点恢复提供更大的窗口,但也必须考虑磁盘空间等实际问题。保留选项会在不再需要旧备份时删除这些备份。

pgBackRest根据保留类型进行完全备份轮换,保留类型可以是计数或时间段。

差异备份和增量备份是基于计数的,但当它们所依赖的备份过期时,它们将始终过期。

# 基于个数
repo1-retention-full-type=count
repo1-retention-full=5
repo1-retention-diff=3
# 基于时间
repo1-retention-full-type=time
repo1-retention-full=28

特殊情况时需删除某备份,可使其过期。

pgbackrest --stanza=demo --set=20231010-150936F expire

2.1.3 从从库备份

pgBackRest支持在从库上执行备份,可以减轻主库负载。备用备份需要配置pg备用主机并启用备份备用选项。如果配置了多个备用,则找到的第一个正在运行的备用将用于备份。

执行备份需要主数据库和备用数据库,但绝大多数文件将从备用数据库复制以减少主数据库的负载。数据库主机可以按任何顺序进行配置。pgBackRest将自动确定哪个是主设备,哪个是备用设备。

[demo]
pg1-host=pg-primary
pg1-path=/var/lib/pgsql/12/data1
pg2-host=pg-standby
pg2-path=/var/lib/pgsql/12/data2
[global]
backup-standby=y
repo1-path=/var/lib/pgbackrest

2.2 恢复功能

2.2.1 恢复方式

1. 基于备份恢复

当--type=immediate或不指定set和type时,默认检查最新的备份进行恢复。

# --target-action=promote,不设定时默认为pause,会导致后续实例处于只读锁定状态
$ pgbackrest --stanza=demo --delta --log-level-console=detail --target-action=promote restore

当指定set时,可恢复特定的备份。

$ pgbackrest --stanza=demo --delta --set=20231010-150936F --log-level-console=detail --target-action=promote restore

2.基于时间点的恢复

在psql中获取时间点:

postgres=# select now();
              now              
-------------------------------
 2023-10-10 15:56:57.860427+08
(1 row)

基于相应时间点,通过type指定恢复类型为time,target指定具体时间点进行恢复。

$ pgbackrest --stanza=demo --delta --type=time "--target=2023-10-10 15:56:57.860427+08" --target-action=promote restore

3.基于数据库的恢复

仅还原指定的数据库:--db-include=db_use。除非明确排除,否则始终还原内置数据库(template0、template1 和 postgres)

还原时排除指定的数据库:--db-exclude=db_unuse。当与 --db-include 选项结合使用时,--db-exclude 仅适用于排除标准系统数据库(template0、template1 和 postgres)

两个参数可均多次传递来指定多个数据库。

对于一个实例存在的数据库:template0、template1 、postgres、db_use、db_unuse,以下两个命令等效:

$ pgbackrest --stanza=demo --delta --db-include=db_use --type=immediate --target-action=promote restore
$ pgbackrest --stanza=demo --delta --db-exclude=db_unuse --type=immediate --target-action=promote restore

注意:恢复完毕后,db_unuse会恢复为稀疏的清零文件,将无法访问数据库db_unuse。仍需要使用drop删除数据库db_unuse。

postgres=# \c db_unuse -
connection to server on socket "/tmp/.s.PGSQL.6641" failed: FATAL:  relation mapping file "base/49157/pg_filenode.map" contains invalid data
Previous connection kept
postgres=# drop database db_unuse;
DROP DATABASE

2.2.2 增量操作恢复

对本地群集文件使用校验和还原或备份:

  1. 确定可以保留的内容。

  2. 确定是否复制文件,仅传输自上次备份以来从存储库中更改的文件。

[global:restore]
delta=y

2.3 其他功能/特性

pgBackRest还有其他丰富的功能特性,如压缩、异步归档、并行、远程备份、备份加密等等。

2.3.1 压缩

压缩通常是备份性能的瓶颈,因此选择更快的算法可以大大提高备份速度。

gzip:默认压缩方式,标准压缩

lz4:比gzip快得多,压缩程度较低

zstd:比gzip更快,压缩程度相似

bzip2:比gzip慢,压缩程度较高

通常zstd是最好的选择,但它可能在某些平台上不可用。RHEL和Debian社区包都有zstd。

compress-type=none/gz/lz4/zst/bz2

2.3.2 异步归档/恢复

启用异步存档操作:

归档时,archive-push命令会异步扫描归档状态目录,查找准备归档的WAL段。本地spool-path存储每个WAL段的状态,以便PostgreSQL可以通过archive命令通知成功或失败。

恢复时,archive-get命令将预取WAL段并在本地缓存它们,以便在请求时从队列中移动或复制段,可以非常快速地将它们提供给PostgreSQL。

archive-async=y
spool-path=/path/to/spool

2.3.3 并行

在压缩、传输、归档时,都支持开启多进程实现并行操作,提升执行效率。

process-max=10 (默认为1,1-999)

注意:官方建议不要将进程最大值设置得太高,最好不要使用超过25%的可用CPU,从而影响数据库性能。

3 备份性能测试

目的:比较pg自带备份工具pg_basebackup和该工具pgBackRest的备份性能。

3.1 测试配置

测试环境:

  • 物理机10.129.180.86

    • CPU192核

    • 型号:Intel(R) Xeon(R) Gold 6348H CPU @ 2.30GHz

    • 内存:754GB

  • Postgresql 15.4(pg_basebackup在pg15中新增了lz4/zstd两种压缩方式)

测试设计:比较pg_basebackup和pgBackRest(关闭并行和开启并行)在四种压缩模式,在不同实例规模下全量备份的表现。

pg_basebackup测试语句:

$ time ./pg_basebackup -D ../bbn -p 6651 -Ft -Xs -Z none/server-gzip/server-lz4/server-zstd

pgBackRest测试语句:

#通过修改配置文件/etc/pgbackrest/pgbackrest.conf修改压缩模式和并行
compress-type=none/gz/lz4/zst
process-max=1/10
​
$ time pgbackrest --stanza=demo --type=full backup

3.2 测试结果

3.2.1 关闭并行下测试结果

分析:在pgBackRest关闭并行时,两种规模的实例的各种压缩方式耗时都远高于pg_basebackup,备份的大小略小于pg_basebackup。

结论:使用关闭并行的pgBackRest比pg_basebackup备份效率低。

3.2.2 开启并行下测试结果

分析:

  1. 耗时上,实例规模小于1G时,开启并行的pgBackRest在不压缩、lz4和zstd方式的耗时略高于pg_basebackup。gzip的耗时略低于pg_basebackup,总体差距不大。

  2. 耗时上,随着实例规模增大,开启并行的pgBackRest的性能开始优于pg_basebackup,且差距拉大。特别是在gzip方式的耗时有明显优势。

  3. 备份大小上,小规模实例下pgBackRest压缩程度略优,随着实例规模增大两者总体较为接近。

结论:

在大规模实例下,使用开启并行的pgBackRest比pg_basebackup备份效率更佳。

 

3.3 补充测试

并行进程个数对系统资源的占用测试

pgBackRest测试语句:

#通过修改配置文件/etc/pgbackrest/pgbackrest.conf修改并行个数
compress-type=gz
process-max=10/20/30/40/50
​
$ time pgbackrest --stanza=demo --type=full backup
并行进程个数 CPU占用率 耗时/s
10 5% 112.6
20 10.8% 80.7
30 15.7% 61
40 21% 49.5
50 26.2% 42.2

分析:随着进程个数的增加,CPU占用率接近线性增加,但耗时的降低减少。

结论:并行进程个数不宜设置过大,不仅对CPU的占用过高,备份性能的优化程度也在降低。

 

4 调研总结

pgBackRest的功能较为强大,与pg_basebackup对比时,其异步归档、并行的特性可以有效解决归档慢、备份效率低的问题。但由于其缺少限速机制(如pg_basebackup的--max-rate=rate),在使用时需要关注其对服务器的影响。

0条评论
0 / 1000
g****n
4文章数
1粉丝数
g****n
4 文章 | 1 粉丝
原创

pgBackRest工具调研

2023-10-17 08:00:32
108
0

1 背景介绍

PostgreSQL在数据集簇目录的pg_wal/子目录下都保持有一个预写式日志(WAL)。这个日志存在的目的是为了保证崩溃后的安全:如果系统崩溃,可以“重放”从最后一次检查点以来的日志项来恢复数据库的一致性。

WAL的存在进而产生了一种流行的备份数据库的策略:我们可以把一个文件系统级别的备份和WAL文件的备份结合起来。当需要恢复时,我们先恢复文件系统备份,然后从备份的WAL文件中重放来把系统带到一个当前状态。

如pg自带工具pg_basebackup进行备份,其manifest内容:

{ "PostgreSQL-Backup-Manifest-Version": 1,
"Files": [
{ "Path": "backup_label", "Size": 227, "Last-Modified": "2023-10-09 07:20:57 GMT", "Checksum-Algorithm": "CRC32C", "Checksum": "b4e8cb08" },
{ "Path": "tablespace_map", "Size": 0, "Last-Modified": "2023-10-09 07:20:57 GMT", "Checksum-Algorithm": "CRC32C", "Checksum": "00000000" },
……
{ "Path": "global/pg_control", "Size": 8192, "Last-Modified": "2023-10-09 07:20:57 GMT", "Checksum-Algorithm": "CRC32C", "Checksum": "43872087" }
],
"WAL-Ranges": [
{ "Timeline": 1, "Start-LSN": "1/73000028", "End-LSN": "1/73000100" }
],
"Manifest-Checksum": "4cc105203fb23172017af4df2437a1cd1f4e7ac59705652a31ee4062854d2d6e"}

但pg_basebackup存在一个问题:由于pg_basebackup无法并行备份和回档的缘故,在数据量变大后,会出现备份回档慢的问题。

因此,调研第三方pg备份工具pgBackRest,并关注其支持并行的功能。

2 pgBackRest工具

pgBackRest是一个PostgreSQL数据库备份和恢复的管理插件,支持完整备份、差异备份和增量备份。在提升备份效率上,其支持并行处理、异步归档等特性。v2.48 是当前的稳定版本。

2.0 基础配置

配置postgresql参数:/Yourpath/pg15/data/postgresql.conf

archive_command = 'pgbackrest --stanza=demo archive-push %p'
archive_mode = on
log_filename = 'postgresql.log'
max_wal_senders = 3
wal_level = replica

配置pgbackrest参数:/etc/pgbackrest/pgbackrest.conf

[demo] #节名称和节配置,与postgresql.conf中archive_command的stanza一致
pg1-path=/YourPath/pg15/data #需备份恢复的pgdata
pg1-port=6641 #pg端口号
pg1-user=YourName #pg用户名
[global] #全局配置
repo1-path=/var/lib/pgbackrest #存储库所在位置

创建节(备份仓库)

# 创建备份仓库
$ pgbackrest --stanza=demo --log-level-console=info stanza-create
# 检查备份仓库情况
$ pgbackrest --stanza=demo --log-level-console=info check
...
INFO: check command end: completed successfully (1122ms)

2.1 备份功能

2.1.1 备份方式

完全备份:完整数据库的完整副本,不依赖于任何其他备份。

差异备份:备份自上一次全量备份之后有变化的数据。

增量备份:备份自上一次备份(包含全量备份、差异备份、增量备份)之后有变化的数据。

增量备份是默认的备份类型,通常是时间和空间成本最低的备份类型。

# 备份命令
$ pgbackrest --stanza=demo --type=full/diff/incr --log-level-console=info backup

三种备份比较:

$ pgbackrest info
stanza: demo
    status: ok
    db (current)
        wal archive min/max (14): 000000050000000000000024/000000060000000000000031
​
        full backup: 20231010-150936F
            timestamp start/stop: 2023-10-10 15:09:36+08 / 2023-10-10 15:09:39+08
            wal start/stop: 000000050000000000000024 / 000000050000000000000024
            database size: 59.8MB, database backup size: 59.8MB
            repo1: backup set size: 59.8MB, backup size: 59.8MB
​
        diff backup: 20231010-150936F_20231010-152139D
            timestamp start/stop: 2023-10-10 15:21:39+08 / 2023-10-10 15:21:41+08
            wal start/stop: 00000006000000000000002F / 00000006000000000000002F
            database size: 63.7MB, database backup size: 6.4MB
            repo1: backup set size: 63.7MB, backup size: 6.4MB
            backup reference list: 20231010-150936F
​
        incr backup: 20231010-150936F_20231010-152223I
            timestamp start/stop: 2023-10-10 15:22:23+08 / 2023-10-10 15:22:26+08
            wal start/stop: 000000060000000000000031 / 000000060000000000000031
            database size: 67.2MB, database backup size: 5.8MB
            repo1: backup set size: 67.2MB, backup size: 5.8MB
            backup reference list: 20231010-150936F, 20231010-150936F_20231010-152139D

2.1.2 备份保留

最好保留尽可能多的备份,以便为时间点恢复提供更大的窗口,但也必须考虑磁盘空间等实际问题。保留选项会在不再需要旧备份时删除这些备份。

pgBackRest根据保留类型进行完全备份轮换,保留类型可以是计数或时间段。

差异备份和增量备份是基于计数的,但当它们所依赖的备份过期时,它们将始终过期。

# 基于个数
repo1-retention-full-type=count
repo1-retention-full=5
repo1-retention-diff=3
# 基于时间
repo1-retention-full-type=time
repo1-retention-full=28

特殊情况时需删除某备份,可使其过期。

pgbackrest --stanza=demo --set=20231010-150936F expire

2.1.3 从从库备份

pgBackRest支持在从库上执行备份,可以减轻主库负载。备用备份需要配置pg备用主机并启用备份备用选项。如果配置了多个备用,则找到的第一个正在运行的备用将用于备份。

执行备份需要主数据库和备用数据库,但绝大多数文件将从备用数据库复制以减少主数据库的负载。数据库主机可以按任何顺序进行配置。pgBackRest将自动确定哪个是主设备,哪个是备用设备。

[demo]
pg1-host=pg-primary
pg1-path=/var/lib/pgsql/12/data1
pg2-host=pg-standby
pg2-path=/var/lib/pgsql/12/data2
[global]
backup-standby=y
repo1-path=/var/lib/pgbackrest

2.2 恢复功能

2.2.1 恢复方式

1. 基于备份恢复

当--type=immediate或不指定set和type时,默认检查最新的备份进行恢复。

# --target-action=promote,不设定时默认为pause,会导致后续实例处于只读锁定状态
$ pgbackrest --stanza=demo --delta --log-level-console=detail --target-action=promote restore

当指定set时,可恢复特定的备份。

$ pgbackrest --stanza=demo --delta --set=20231010-150936F --log-level-console=detail --target-action=promote restore

2.基于时间点的恢复

在psql中获取时间点:

postgres=# select now();
              now              
-------------------------------
 2023-10-10 15:56:57.860427+08
(1 row)

基于相应时间点,通过type指定恢复类型为time,target指定具体时间点进行恢复。

$ pgbackrest --stanza=demo --delta --type=time "--target=2023-10-10 15:56:57.860427+08" --target-action=promote restore

3.基于数据库的恢复

仅还原指定的数据库:--db-include=db_use。除非明确排除,否则始终还原内置数据库(template0、template1 和 postgres)

还原时排除指定的数据库:--db-exclude=db_unuse。当与 --db-include 选项结合使用时,--db-exclude 仅适用于排除标准系统数据库(template0、template1 和 postgres)

两个参数可均多次传递来指定多个数据库。

对于一个实例存在的数据库:template0、template1 、postgres、db_use、db_unuse,以下两个命令等效:

$ pgbackrest --stanza=demo --delta --db-include=db_use --type=immediate --target-action=promote restore
$ pgbackrest --stanza=demo --delta --db-exclude=db_unuse --type=immediate --target-action=promote restore

注意:恢复完毕后,db_unuse会恢复为稀疏的清零文件,将无法访问数据库db_unuse。仍需要使用drop删除数据库db_unuse。

postgres=# \c db_unuse -
connection to server on socket "/tmp/.s.PGSQL.6641" failed: FATAL:  relation mapping file "base/49157/pg_filenode.map" contains invalid data
Previous connection kept
postgres=# drop database db_unuse;
DROP DATABASE

2.2.2 增量操作恢复

对本地群集文件使用校验和还原或备份:

  1. 确定可以保留的内容。

  2. 确定是否复制文件,仅传输自上次备份以来从存储库中更改的文件。

[global:restore]
delta=y

2.3 其他功能/特性

pgBackRest还有其他丰富的功能特性,如压缩、异步归档、并行、远程备份、备份加密等等。

2.3.1 压缩

压缩通常是备份性能的瓶颈,因此选择更快的算法可以大大提高备份速度。

gzip:默认压缩方式,标准压缩

lz4:比gzip快得多,压缩程度较低

zstd:比gzip更快,压缩程度相似

bzip2:比gzip慢,压缩程度较高

通常zstd是最好的选择,但它可能在某些平台上不可用。RHEL和Debian社区包都有zstd。

compress-type=none/gz/lz4/zst/bz2

2.3.2 异步归档/恢复

启用异步存档操作:

归档时,archive-push命令会异步扫描归档状态目录,查找准备归档的WAL段。本地spool-path存储每个WAL段的状态,以便PostgreSQL可以通过archive命令通知成功或失败。

恢复时,archive-get命令将预取WAL段并在本地缓存它们,以便在请求时从队列中移动或复制段,可以非常快速地将它们提供给PostgreSQL。

archive-async=y
spool-path=/path/to/spool

2.3.3 并行

在压缩、传输、归档时,都支持开启多进程实现并行操作,提升执行效率。

process-max=10 (默认为1,1-999)

注意:官方建议不要将进程最大值设置得太高,最好不要使用超过25%的可用CPU,从而影响数据库性能。

3 备份性能测试

目的:比较pg自带备份工具pg_basebackup和该工具pgBackRest的备份性能。

3.1 测试配置

测试环境:

  • 物理机10.129.180.86

    • CPU192核

    • 型号:Intel(R) Xeon(R) Gold 6348H CPU @ 2.30GHz

    • 内存:754GB

  • Postgresql 15.4(pg_basebackup在pg15中新增了lz4/zstd两种压缩方式)

测试设计:比较pg_basebackup和pgBackRest(关闭并行和开启并行)在四种压缩模式,在不同实例规模下全量备份的表现。

pg_basebackup测试语句:

$ time ./pg_basebackup -D ../bbn -p 6651 -Ft -Xs -Z none/server-gzip/server-lz4/server-zstd

pgBackRest测试语句:

#通过修改配置文件/etc/pgbackrest/pgbackrest.conf修改压缩模式和并行
compress-type=none/gz/lz4/zst
process-max=1/10
​
$ time pgbackrest --stanza=demo --type=full backup

3.2 测试结果

3.2.1 关闭并行下测试结果

分析:在pgBackRest关闭并行时,两种规模的实例的各种压缩方式耗时都远高于pg_basebackup,备份的大小略小于pg_basebackup。

结论:使用关闭并行的pgBackRest比pg_basebackup备份效率低。

3.2.2 开启并行下测试结果

分析:

  1. 耗时上,实例规模小于1G时,开启并行的pgBackRest在不压缩、lz4和zstd方式的耗时略高于pg_basebackup。gzip的耗时略低于pg_basebackup,总体差距不大。

  2. 耗时上,随着实例规模增大,开启并行的pgBackRest的性能开始优于pg_basebackup,且差距拉大。特别是在gzip方式的耗时有明显优势。

  3. 备份大小上,小规模实例下pgBackRest压缩程度略优,随着实例规模增大两者总体较为接近。

结论:

在大规模实例下,使用开启并行的pgBackRest比pg_basebackup备份效率更佳。

 

3.3 补充测试

并行进程个数对系统资源的占用测试

pgBackRest测试语句:

#通过修改配置文件/etc/pgbackrest/pgbackrest.conf修改并行个数
compress-type=gz
process-max=10/20/30/40/50
​
$ time pgbackrest --stanza=demo --type=full backup
并行进程个数 CPU占用率 耗时/s
10 5% 112.6
20 10.8% 80.7
30 15.7% 61
40 21% 49.5
50 26.2% 42.2

分析:随着进程个数的增加,CPU占用率接近线性增加,但耗时的降低减少。

结论:并行进程个数不宜设置过大,不仅对CPU的占用过高,备份性能的优化程度也在降低。

 

4 调研总结

pgBackRest的功能较为强大,与pg_basebackup对比时,其异步归档、并行的特性可以有效解决归档慢、备份效率低的问题。但由于其缺少限速机制(如pg_basebackup的--max-rate=rate),在使用时需要关注其对服务器的影响。

文章来自个人专栏
pg数据库工具
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0