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) во время процесса восстановления.
Кажется, это, наконец, работает для меня.