Назад | Перейти на главную страницу

pg_restore занимает намного больше времени, чем pg_dump

Я регулярно сохраняю, а затем восстанавливаю небольшую базу данных PostgreSQL, которая используется для тестирования. Его данные регулярно обновляются в результате тестов, затем должен быть сделан новый дамп, и эти дампы регулярно используются для воссоздания базы данных в четко определенном состоянии.

Я заметил, что дамп (используя pg_dump -Fc database) занимает всего несколько секунд, но восстановление (pg_restore -d database) занимает около минуты. Это кажется странным. Я ожидал, что и то, и другое займёт примерно одинаковое время (при условии, что обе задачи связаны с вводом-выводом).

Есть ли проблема с восстановлением? Могу ли я сделать это быстрее? Или это нормально, что восстановление занимает намного больше времени, чем дамп? (И если да, то почему?)

Размер файла дампа обычно составляет около 3-4 МиБ; СУБД - это PostgreSQL V8.4, работающая на Pentium4 3 ГГц с 1 ГБ оперативной памяти под Ubuntu Linux.

Содержимое индекса не является частью резервной копии, это только определение индекса. И это займет всего несколько байтов. Когда индекс создается во время восстановления и все данные проиндексированы, он будет намного больше. Это займет время, но сколько времени зависит от вашей ситуации.

pg_restore есть возможность одновременного восстановления (начиная с версии 8.4), используйте --jobs=number-of-jobs

Для восстановления база данных должна проделать еще много работы:

На ум сразу приходят некоторые вещи:

  • Письмо медленнее чтения
  • Анализ ввода требует времени
  • Обновление индексов и других внутренних структур
  • Поддержание ссылочной целостности

Не уверен, что это составляет разницу во времени.