pg_restore 所花的时间比 pg_dump 长得多

pg_restore 所花的时间比 pg_dump 长得多

我经常保存并恢复一个用于测试的小型 PostgreSQL 数据库。测试结果会定期更新其数据,然后必须进行新的转储,并定期使用转储重新创建处于明确状态的数据库。

我注意到转储(使用pg_dump -Fc database)仅需几秒钟,但恢复(pg_restore -d database)则需要大约一分钟。这似乎很奇怪。我原本以为这两项任务需要大约相同的时间(假设两项任务都受 I/O 限制)。

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

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

答案1

索引的内容不是备份的一部分,只是索引的定义。而且这只会占用几个字节。如果在恢复期间创建索引并索引所有数据,那么索引会大得多。这会花费一些时间,但具体需要多少时间取决于您的情况。

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

答案2

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

我立即想到了一些事情:

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

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

相关内容