web-dev-qa-db-ja.com

pg_restoreはpg_dumpよりもはるかに時間がかかります

私は定期的に、テストに使用される小さなPostgreSQLデータベースを保存し、後で復元しています。テストの結果、そのデータは定期的に更新されます。その後、新しいダンプを作成する必要があります。ダンプは、明確に定義された状態でデータベースを再作成するために定期的に使用されます。

ダンプ(pg_dump -Fc databaseを使用)には数秒しかかかりませんが、復元(pg_restore -d database)には約1分かかります。これは奇妙に思えます。両方にほぼ同じ時間がかかると予想していました(両方のタスクがI/Oバウンドであると想定しています)。

復元に問題がありますか?もっと速くできますか?または、復元がダンプよりもはるかに長くかかるのは正常ですか? (そして、もしそうなら、なぜですか?)

ダンプファイルには通常約3〜4 MiBがあります。 DBMSはPostgreSQL V8.4で、1GiBのPentium4 3GHzで実行されていますRAM Ubuntu Linuxで。

9
sleske

インデックスの内容はバックアップの一部ではなく、インデックスの定義のみです。そして、それは数バイトしかかかりません。インデックスが復元中に作成され、すべてのデータにインデックスが付けられると、それははるかに大きくなります。これには時間がかかりますが、状況によって異なります。

pg_restore には、同時復元のオプションがあります(バージョン8.4以降)、--jobs=number-of-jobsを使用します

9
Frank Heikens

復元の場合、データベースは多くの追加作業を行う必要があります。

すぐに頭に浮かぶことがいくつかあります。

  • 書き込みは読み取りより遅い
  • 入力の解析には時間がかかります
  • インデックスおよびその他の内部構造の更新
  • 参照整合性の維持

ただし、これがその時間差に相当するかどうかはわかりません。

4
Sven