Рейтинг:0

Postgresql 13 — ускорение pg_dump до 5 минут вместо 70 минут

флаг cn

Мы используем pg_dump каждую ночь, чтобы сделать снимок нашей базы данных. Делали давно простой командой

pg_dump -Fc имя_базы_данных

Это занимает около часа и создает файл размером 30+ ГБ.

Как мы можем ускорить процесс?

Рейтинг:4
флаг cn

Our biggest table contains raw image data in form of a bytea column.

When we did a simple COPY from psql on this table to stdout, it was quite fast (1 or 2 minutes), but it was very slow with the pg_dump. It took ~60 minutes.

So investigating this I stumbled across this discussion. It seams that the pg_dump compression is rather slow if data is already compressed as it is with image data in a bytea format. And it is better to compress outside of pg_dump (-Z0).

Additionally we found that we can make use of our multi-core cpu (-j10 and pigz). So now we are doing it like this:

$ pg_dump -Z0 -j 10 -Fd database_name -f dumpdir
$ tar -cf - dumpdir | pigz > dumpdir.tar.gz
$ rm dumpdir

The time has dropped from ~70 minutes to ~5 minutes. Quite amazing.

You can restore it like this:

$ pigz -dc dumpdir.tar.gz | tar -C dumpdir --strip-components 1 -xf -
$ pg_restore -j 10 -Fd -O -d database_name dumpdir
Melih avatar
флаг gh
У нас была аналогичная проблема. 2 дня потрачено на pg_dump, и я отменил, но мне нужно сделать дамп. у нас есть база данных 3 ТБ, а более 1,5 ТБ - это таблица изображений bytea. Время может выпадать в больших столах?
Janning avatar
флаг cn
Да, я думаю, это очень поможет (= часов)
plancys avatar
флаг sd
Как вы восстанавливаете БД из этого? `pg_restore -d root -j 10 -Fd dump_2022-03-24_17_47_40.tar.gz` возвращает мне `pg_restore: ошибка: не удалось открыть входной файл "dump_2022-03-24_17_47_40.tar.gz/toc.dat": не каталог`
Melih avatar
флаг gh
@Janning Прошло 2 дня. теперь с -j 2 6,5 часов.я надеюсь, что с -j 10 будет меньше времени... спасибо
Janning avatar
флаг cn
Проблема не в -j, а в том, что -Z0 отключает сжатие и использует -Fd для сброса в каталог. -j просто сообщает процессу, сколько процессоров он должен использовать. Если у вас их много, используйте их все.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.