pg_restore 花费的时间比 pg_dump 长得多

sle*_*ske 10 postgresql performance database-backup

我定期保存并稍后恢复用于测试的小型 PostgreSQL 数据库。它的数据作为测试的结果定期更新,然后必须进行新的转储,并且定期使用转储以良好定义的状态重新创建数据库。

我注意到转储(使用pg_dump -Fc database)只需要几秒钟,但恢复(pg_restore -d database)需要大约一分钟。这看起来很奇怪。我本来希望两者花费大约相同的时间(假设两个任务都是 I/O 绑定的)。

还原有问题吗?我可以让它更快吗?或者恢复比转储花费更长的时间是否正常?(如果是,那为什么?)

转储文件通常有大约 3-4 MiB;DBMS 是 PostgreSQL V8.4,在 Ubuntu Linux 下运行在 Pentium4 3GHz 和 1GiB RAM 上。

小智 10

索引的内容不是备份的一部分,只是索引的定义。这将只需要几个字节。当在恢复期间创建索引并且索引所有数据时,它会大得多。这需要时间,但这取决于您的情况需要多少时间。

pg_restore确实有一个并发还原选项(从 8.4 版开始),请使用--jobs=number-of-jobs

  • @sleske 您可以尝试使用 [文件系统备份方法](http://www.postgresql.org/docs/8.4/static/backup-file.html)。这应该保留索引,此外,备份和恢复的运行速度可能会更快 (2认同)

Sve*_*ven 7

为了恢复,数据库必须做很多额外的工作:

有些事情立即浮现在脑海中:

  • 写作比阅读慢
  • 解析输入需要时间
  • 更新索引和其他内部结构
  • 维护引用完整性

但不确定这是否相当于那个时间差。