postgresql - 使用 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
有什么我错过的吗?如何改善恢复时间?
解决方案
有几件事可能是问题:
pg_restore
通过同时运行多个COPY
和CREATE INDEX
命令来并行化。现在,如果您的数据库有一个带有单个大索引的大表,那么并行化将无济于事。
也许您的 I/O 系统已达到极限。然后并行运行进程不会提高性能。
如果你有很多大对象,这会减慢处理速度,我不确定并行化是否有帮助。
永远不要设置full_page_writes
或设置autovacuum
,off
除非您在还原后将它们设置回on
并准备好在发生崩溃时转储数据库集群。我怀疑性能提升是否值得,尤其是对于full_page_writes
.
您忘记的一个参数是max_wal_size
. 如果你提出这个问题,它将有助于编写性能。
除此之外,您必须先找出瓶颈所在,然后才能解决它。
pg_basebackup
使用通常更快的不同备份方法怎么样?
推荐阅读
- android - 预期 BEGIN_ARRAY 但为 STRING,如何将 STRING 转换为空 ARRAY?
- c# - 是否可以从 .net core 3.1 Windows 服务打印文档?
- javascript - 在 EChart 上画圆
- c# - 如果在 linq 语句 C# 中不满足值,则显示值
- shopify - 有没有办法在 Shopify (Liquid) 上的选定单选按钮上获得图像叠加?
- symfony - Symfony 5 Doctrine ORM : 从现在开始获取最近的日期
- google-apps-script - 如何更改列的背景颜色?
- javascript - 在 Web 应用程序中的牵引打印机中打印 pos 收据
- python - MainWindow 上的 TypError (self, str)
- r - 如何拆分数据帧以进行并行处理,然后重新组合结果?