【问题标题】:pg_dump and pg_restore on giant databases大型数据库上的 pg_dump 和 pg_restore
【发布时间】:2019-03-14 13:48:12
【问题描述】:

我目前的任务是改进数据库结构。 为此,我们希望有效地转储和恢复一个巨大的数据库。 (大约 1TB 并且还在增长

为了测试这个数据库,我们想把这个数据库转移到另一个服务器节点,通过pg_dumppg_restore

我们正在运行 v10 (https://www.postgresql.org/docs/10/app-pgdump.html) 服务器,因此我们受限于它们可能的参数。还需要转储整个数据库,而不仅仅是部分。

为此,我尝试了几种方法,这些资源帮助很大:

最重要的是:

问题是,您几乎只能改进其中一项任务,但不能同时改进两者。

案例一

以目录格式转储非常快(~1 小时),但恢复速度却不是。

pg_dump --blobs --dbname="$DBNAME" --file=$DUMPDIR --format=directory --host=$SERVERHOSTNAME --jobs=$THREADS --port=$SERVERPORT--username="$SERVERUSERNAME"
pg_restore --clean --create --format=directory --jobs=$THREADS --host=$SERVERHOSTNAME --port=$SERVERPORT --username="$SERVERUSERNAME" "./"

这个恢复方法的问题是,即使我为它分配了多个核心,它也只使用一个,服务器核心上使用的 CPU 几乎没有 4%。

案例2

以自定义格式转储非常慢,服务器甚至无法在一夜之间完成(会话超时)。

pg_dump --blobs --compress=9 --dbname="$dbname" --file="$DUMPDIR/db.dump" --format=custom --host=$SERVERHOSTNAME --port=$SERVERPORT --username=$SERVERUSERNAME

所以我想到了不同的方法:

  1. 用方法 #1 转储它,然后转换它(如何?)并使用更快的恢复方法(变体 #2?)
  2. 在不同的核心上同时创建多个转储但具有不同的架构(总共有 6 个),然后将它们合并回来(如何?)

根据上述作者的说法,管道似乎是一种无效的倾倒方式。

有没有人有这方面的经验?我的方法想法有用吗,还是您有完全不同的解决方案?

哦,在我忘记之前:我们目前在外部服务器上限制为 5TB,运行数据库的内部服务器不应因数据片段而变得臃肿,即使是暂时的。

【问题讨论】:

    标签: postgresql pg-dump database-cloning


    【解决方案1】:

    具有目录格式的并行pg_restore 应该会加快处理速度。

    如果不是,我怀疑大部分数据都在一个大表中,pg_restore(和pg_dump)无法并行化。

    确保您禁用压缩 (-z 0) 以提高速度(除非您的网络较弱)。

    使用在线文件系统备份可能会更快:

    • pg_basebackup 很简单,但不能并行化。

    • 使用low-level API,您可以将备份与操作系统或存储技术并行化。

    缺点是使用文件系统备份,只能复制整个数据库集群。

    【讨论】:

    • 感谢您的回复!是的,我们有一张大桌子,因此不可能进行并行化。 (参见案例#1)我希望压缩能够提高还原性能,但遗憾的是它没有。我正在考虑使用一个简单的 rsync 至少获得初始参考备份,这样我们就可以在另一个节点上运行测试,然后再迁移到另一个 pg_dump 解决方案。将看看你建议的两种方法。
    • 找出导致多线程恢复问题的原因:没有明确说明 dbname,并且 toc.dat 似乎使用了错误的 dbname,并尝试恢复输出文件中的所有内容,而不是数据库。在恢复中手动设置 dbname 修复了恢复问题,现在就像一个魅力。尽管如此,仍有很大的改进空间,仍然非常感谢!
    • 所以我遇到了类似的情况,我将在 AWS 基础设施上移动一个更大的 5TB 数据库。因此转储将在 S3 上完成,还原将在另一个帐户 RDS 上完成。 1TB 恢复需要多长时间?您为恢复生成了多少线程?
    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 2011-01-06
    相关资源
    最近更新 更多