首页 > 解决方案 > 使用 pg_restore 的 --jobs 参数没有提高性能

问题描述

pg_restore用来恢复使用pg_dump. (备份和恢复都在 PostgreSQL 12 上进行)。使用自定义格式选项进行备份--format=custom

10 GB 备份的恢复大约需要 30 分钟。随着备份大小的增加,恢复时间会显着增加。所以我尝试了--jobs改善恢复时间的参数。

根据文档,并发连接将用于恢复数据库对象。我验证了 restore 的输出,并且可以验证是否启动了等于--jobs参数值的并行线程。但是,使用任何参数值都没有改善恢复时间--jobs

我知道性能取决于硬件基础设施。但是这台机器有 16 个 vcpus 和 32GB RAM。

我还尝试使用以下配置调整博客中提到的 Postgres,但恢复时间仍然没有改善。

    工作内存 = 32MB
    共享缓冲区 = 4GB
    维护工作内存 = 2GB
    full_page_writes = 关闭
    自动真空 = 关闭
    wal_buffers = -1

有什么我错过的吗?如何改善恢复时间?

标签: postgresqlpg-restore

解决方案


有几件事可能是问题:

  • pg_restore通过同时运行多个COPYCREATE INDEX命令来并行化。

    现在,如果您的数据库有一个带有单个大索引的大表,那么并行化将无济于事。

  • 也许您的 I/O 系统已达到极限。然后并行运行进程不会提高性能。

  • 如果你有很多大对象,这会减慢处理速度,我不确定并行化是否有帮助。

永远不要设置full_page_writes或设置autovacuumoff除非您在还原后将它们设置回on并准备好在发生崩溃时转储数据库集群。我怀疑性能提升是否值得,尤其是对于full_page_writes.

您忘记的一个参数是max_wal_size. 如果你提出这个问题,它将有助于编写性能。

除此之外,您必须先找出瓶颈所在,然后才能解决它。

pg_basebackup使用通常更快的不同备份方法怎么样?


推荐阅读