问题描述
我们在速度方面面临着众所周知的 pg_dumps 效率问题。我们目前有一个 Azure 托管的 Postgresql,它保存我们正在由 SmileCDR 创建/更新的资源。不知何故,三个月后,由于保存了 FHIR 对象,它变得越来越大。现在,我们想要一个全新的环境;在这种情况下,必须删除 Postgresql 中的持久数据,并且必须使用旧数据集启动新数据库。
请注意。
- pg_dump 消耗相对多得多的时间,差不多一天。我们如何加快备份-恢复过程?
- 我们可以使用和应用哪些替代方案,而 pg_dump 可以实现目标?
重要说明;
- SmileCDR 使用 Flyway 在 Postgresql 中进行版本控制。
- 所有东西都必须从旧的复制到新的。
- Postgresql 版本为 11、2vCores、100GB 存储空间。
- FHIR 对象保存在 Postgresql 中。
- 一些建议,如多个作业,不压缩,目录格式已经实践过,但没有显着影响。
解决方法
既然您将自己置于数据库托管的笼子里,除了 pg_dump
,您别无选择。它们故意让您难以获取数据。
你能做的最好的事情就是多进程的目录格式转储;将尽可能并行读取数据:
pg_dump -F d -j 6 -f backupdir -h ... -p ... -U ... dbname
在这个例子中,我指定了 6 个并行运行的进程。这将加快处理速度,除非您只有一张大表,而其他所有表都非常小。