PostgreSQL-как восстановить очень большую базу данных

у меня возникла небольшая проблема, когда я пытаюсь восстановить большую базу данных (почти 32Go в пользовательском формате) на моем узле базы данных devel (этот узел имеет меньше ОЗУ, CPU... чем мой производственный сервер).

мои дампы базы данных генерируются с помощью команды, аналогичной:

pg_dump -F custom -b myDB -Z 9 > /backup/myDB-`date +%y%m%d`.pg91

и когда я восстанавливаю его, я использовал следующую команду:

pg_restore -F custom -j 5 -d myDB /backup/myDB-20130331.pg91

но здесь, каждый раз, когда команда восстановления не удалось с ошибкой, как:

pg_restore: [archiver (db)] error returned by PQputCopyData: server closed the connection unexpectedly
This probably means the server terminated abnormally
    before or while processing the request.
pg_restore: [archiver] worker process failed: exit code 1
pg_restore: [archiver (db)] error returned by PQputCopyData: server closed the connection unexpectedly
This probably means the server terminated abnormally
    before or while processing the request.
pg_restore: [archiver (db)] error returned by PQputCopyData: server closed the connection unexpectedly
This probably means the server terminated abnormally
    before or while processing the request.
pg_restore: [archiver (db)] error returned by PQputCopyData: server closed the connection unexpectedly
This probably means the server terminated abnormally
    before or while processing the request.

и когда я проверяю свой postgresql журналы, я могу прочитать это:

   HINT:  In a moment you should be able to reconnect to the database and repeat your command.
   LOG:  all server processes terminated; reinitializing
   LOG:  database system was interrupted; last known up at 2013-04-02 11:41:48 UTC
   LOG:  database system was not properly shut down; automatic recovery in progress
   LOG:  redo starts at 86/26F302B0
   LOG:  unexpected pageaddr 85/E3F52000 in log file 134, segment 38, offset 16064512
   LOG:  redo done at 86/26F51FC0
   LOG:  last completed transaction was at log time 2013-04-02 11:50:47.663599+00
   LOG:  database system is ready to accept connections
   LOG:  autovacuum launcher started

это довольно странно, мой сервер postgresql "перезагружается" только из-за моего восстановления. Я стараюсь минимизировать количество заданий (-j 5 опции), но все равно получил ту же проблему. Однако на узле с лучшими характеристиками у меня нет проблем с восстановлением этой базы данных. Я не уверен, но, возможно, обновления моих индексов (один из них действительно слишком велик) могут быть ключом к пониманию этой проблемы?

так у меня есть несколько вопросов: есть ли лучший способ восстановить действительно большую базу данных? Я что-то пропустил в своей команде pg_restore? Может быть, настройки моего сервера devel слишком низкие?

любая подсказка будет принята с благодарностью. Спасибо заранее.

env: PostgreSQL 9.1 (устанавливается через пакеты Debian)

1 ответов


для такого рода большой работы рекомендуется отключить autovacuum (установив его в off в своем postgresql.conf) во время процесса восстановления.

Кажется, это, наконец, работает для меня.