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

Как сделать pg_dump менее ресурсоемким

Я настроил cron для ежедневного вызова pg_dump, используя следующее правило:

# xyz database backups:
00 01 * * * root umask 077 && pg_dump --user=xyz_system xyz | gzip > /var/xyz/backup/db/xyz/`date -u +\%Y\%m\%dT\%H\%M\%S`.gz

В принципе, это работает. База данных растет относительно быстро и экспоненциально (однако показатель не очень большой). В настоящее время сжатый дамп занимает около 160 МБ. Когда база данных выгружается, система начинает сканирование. Средняя нагрузка, которую я видел с помощью top команда была о 200, 200, 180. В основном сервер почти не реагирует.

В Первый вопрос как определить, где находится узкое место. Низкая производительность вызвана интенсивными операциями ввода-вывода? Это вызвано проблемами блокировки таблицы? Может это проблема с памятью? Выход pg_dump команда передается в gzip команда. Является ли он последовательным, т.е. весь дамп помещается в память (проблема с подкачкой?), А затем сжимается или одновременно (т.е. gzip сжимает то, что получает, и ждет большего)? Может быть, это вызвано каким-то другим фактором?

В второй вопрос как сделать операцию сброса менее навязчивой для основных функций системы. Насколько я понимаю, дамп не может занимать слишком много времени из-за целостности базы данных. Существуют блокировки записи в таблицы и т. Д. Что я могу сделать, чтобы ограничить проблемы (или отложить их, учитывая рост базы данных).

В третий вопрос: Уже пора узнать о более сложных конфигурациях базы данных? Система работает нормально, когда резервное копирование базы данных не выполняется, но, может быть, проблема с дампом базы данных является первым признаком входящих проблем?

Вот это да. Поразительное количество вопросов. Я попытаюсь ответить на некоторые вопросы, но это еще не полный ответ.

как определить узкое место.

Использовать top сначала посмотреть, что происходит во время свалки. Проверьте использование ЦП процесса, статус процесса. D означает «ожидание ввода / вывода».

Низкая производительность вызвана интенсивными операциями ввода-вывода?

Да, скорее всего.

Это вызвано проблемами блокировки таблицы?

Может быть. вы могли бы использовать pg_stat_activity системное представление, чтобы увидеть, что происходит в postgres во время дампа.

Может дело в памяти?

Маловероятно.

Вывод команды pg_dump передается по конвейеру команде gzip. Последовательный, т.е. весь дамп помещается в память (проблема с подкачкой?)

Нет. Gzip - это компрессор блоков, работающий в потоковом режиме, он не сохраняет весь ввод в памяти.

а затем в сжатом или параллельном режиме (т.е. gzip сжимает то, что получает, и ждет большего)?

Да, он сжимает блок за блоком, выводит и ждет большего.

Может быть, это вызвано каким-то другим фактором?

Да.

Насколько я понимаю, дамп не может занимать слишком много времени из-за целостности базы данных. Существуют блокировки записи в таблицы и т. Д. Что я могу сделать, чтобы ограничить проблемы (или отложить их, учитывая рост базы данных).

Продолжительность дампа не влияет на целостность дампа. Целостность обеспечивается за счет использования одной транзакции с повторяемое чтение уровень изоляции всем процессом pg_dump. Блокировок записи в таблицу НЕТ.

Не пора ли уже узнать о более сложных конфигурациях базы данных? Система работает нормально, когда резервное копирование базы данных не выполняется, но, может быть, проблема с дампом базы данных является первым признаком входящих проблем?

Никогда не поздно. Начать с http://wiki.postgresql.org/wiki/Performance_Optimization.

Рекомендую посмотреть непрерывное архивирование из postgresql. Вот преимущества перед использованием pg_dump:

  1. Нет необходимости каждый раз делать полную резервную копию. Вначале достаточно одной полной резервной копии, но рекомендуется, например, создавать полную резервную копию каждые несколько дней.
  2. Намного быстрее восстановить, когда БД растет в размерах.
  3. Возможность восстановления до какой-то другой точки (Point-In-Time Recovery).
  4. Вы будете делать инкрементное резервное копирование каждый час (около 30 минут). Это можно настроить, и это также зависит от активности обновления.

Однако есть некоторые недостатки (которые в большинстве случаев могут не быть проблемой):

  1. Обычно требуется больше места, потому что это двоичные резервные копии. Папку БД можно сжать.
  2. Вы не можете восстановить их на другой архитектуре (двоичные данные).