使用 pg_restore 的 --jobs 参数没有提高性能
No performance improvement using --jobs parameter for pg_restore
我正在使用 pg_restore
to restore the Postgresql database backed up using pg_dump
。 (备份和恢复都在 PostgreSQL 12 上进行)。使用自定义格式选项进行备份 --format=custom
.
10 GB 备份的还原需要将近 30 分钟。随着备份大小的增加,恢复时间会显着增加。所以我尝试了 --jobs
参数来缩短恢复时间。
根据 documentation,并发连接将用于恢复数据库对象。我验证了 restore 的输出,我可以验证是否有并行线程启动等于 --jobs
参数的值。但是,--jobs
参数的任何值都没有改善恢复时间。
我知道性能取决于硬件基础设施。但是机器有16个vcpus和32GB RAM。
我也尝试按照 blog 中提到的使用以下配置调整 Postgres,但恢复时间仍然没有改善。
work_mem = 32MB
shared_buffers = 4GB
maintenance_work_mem = 2GB
full_page_writes = off
autovacuum = off
wal_buffers = -1
有什么我遗漏的吗?如何缩短恢复时间?
有几件事可能是问题所在:
pg_restore
通过 运行 多个 COPY
和 CREATE INDEX
命令并行化。
现在,如果您的数据库有一个大型 table 和一个大型索引,并行化将无济于事。
也许您的 I/O 系统已达到极限。那么 运行 并行进程不会提高性能。
如果您有很多大对象,这会减慢处理速度,我不确定并行化是否有帮助。
永远不要将 full_page_writes
或 autovacuum
设置为 off
,除非您在还原后将它们设置回 on
并准备好将数据库集群转储到坠机事件。我怀疑性能提升是否值得,特别是对于 full_page_writes
.
您忘记的一个参数是max_wal_size
。如果你提出来,它将有助于写性能。
除此之外,你必须找出瓶颈在哪里才能解决它。
使用其他通常更快的备份方法(例如 pg_basebackup
)怎么样?
我正在使用 pg_restore
to restore the Postgresql database backed up using pg_dump
。 (备份和恢复都在 PostgreSQL 12 上进行)。使用自定义格式选项进行备份 --format=custom
.
10 GB 备份的还原需要将近 30 分钟。随着备份大小的增加,恢复时间会显着增加。所以我尝试了 --jobs
参数来缩短恢复时间。
根据 documentation,并发连接将用于恢复数据库对象。我验证了 restore 的输出,我可以验证是否有并行线程启动等于 --jobs
参数的值。但是,--jobs
参数的任何值都没有改善恢复时间。
我知道性能取决于硬件基础设施。但是机器有16个vcpus和32GB RAM。
我也尝试按照 blog 中提到的使用以下配置调整 Postgres,但恢复时间仍然没有改善。
work_mem = 32MB shared_buffers = 4GB maintenance_work_mem = 2GB full_page_writes = off autovacuum = off wal_buffers = -1
有什么我遗漏的吗?如何缩短恢复时间?
有几件事可能是问题所在:
pg_restore
通过 运行 多个COPY
和CREATE INDEX
命令并行化。现在,如果您的数据库有一个大型 table 和一个大型索引,并行化将无济于事。
也许您的 I/O 系统已达到极限。那么 运行 并行进程不会提高性能。
如果您有很多大对象,这会减慢处理速度,我不确定并行化是否有帮助。
永远不要将 full_page_writes
或 autovacuum
设置为 off
,除非您在还原后将它们设置回 on
并准备好将数据库集群转储到坠机事件。我怀疑性能提升是否值得,特别是对于 full_page_writes
.
您忘记的一个参数是max_wal_size
。如果你提出来,它将有助于写性能。
除此之外,你必须找出瓶颈在哪里才能解决它。
使用其他通常更快的备份方法(例如 pg_basebackup
)怎么样?