Я настроил 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 сжимает то, что получает, и ждет большего)? Может ли это быть вызвано каким-то другим фактором?
Второй вопрос , как сделать демпинг операции менее навязчивой для основных функций системы. Насколько я понимаю, дамп не может занять слишком много времени из-за целостности базы данных. Есть блокировки записи таблиц и т. Д. Что я могу сделать, чтобы ограничить проблемы (или отложить их, учитывая рост базы данных).
Третий вопрос : Есть ли уже время , чтобы узнать о более сложных конфигурациях баз данных? Система работает нормально, когда резервные копии базы данных не выполняются, но, возможно, проблема с дампом БД является первым симптомом входящих проблем?
pg_dump
100% процессором, и это было от gzip. Заданиеpg_dump --compress=0
решило это для меня на Ubuntu 16.04. После этого резервные копии были очень быстрыми. Следите за сжатием gzip в контейнерах; может не делать то, что вы ожидаете.