При администрировании крупных баз данных 1С:Предприятие на платформе PostgreSQL одним из самых острых вопросов становится планирование дискового пространства. Ситуация, когда база данных имеет объем 200 Гб, а свободного места на сервере остается около 300 Гб, часто вызывает опасения у системных администраторов: не «задохнется» ли сервер в процессе создания бэкапа? Разберем детально механизмы работы PostgreSQL при резервном копировании и выясним, какие факторы действительно влияют на потребление ресурсов диска.
Рассмотрим основной инструмент, который чаще всего используется для логического резервирования — утилиту pg_dump. Вопреки распространенному мифу, эта утилита не создает промежуточный «слепок» или временную копию всей базы данных внутри системных каталогов PostgreSQL перед отправкой пользователю. Проанализируем, как происходит этот процесс:
Таким образом, само по себе создание логической копии средствами pg_dump на внешний носитель не требует дополнительного свободного места, сопоставимого с размером базы данных.
Несмотря на то, что сам файл бэкапа не занимает место на сервере БД, существует критический фактор, который может привести к остановке системы — это рост транзакционных логов (папка pg_wal). Разберем по шагам, почему это происходит:
Для обеспечения консистентности (целостности) данных pg_dump запускает процесс в рамках одной длинной транзакции с уровнем изоляции REPEATABLE READ. Это гарантирует, что база в бэкапе будет зафиксирована на момент начала копирования. Однако это накладывает ограничения на работу сервера:
Autovacuum не может полностью вычищать старые версии строк (dead tuples) в таблицах, которые изменяются во время работы бэкапа, так как эти данные могут понадобиться открытой транзакции бэкапа.Важный вывод: Если во время резервного копирования в базе идет интенсивная работа (например, массовое перепроведение документов или закрытие месяца), объем папки pg_wal может вырасти на десятки гигабайт. При наличии 300 Гб свободного места это не критично, но в условиях жесткого дефицита (например, если осталось 20-30 Гб) это может привести к аварийной остановке сервера.
Выясним причину, по которой размер файла резервной копии почти всегда значительно меньше размера работающей базы данных. В контексте 1С это особенно заметно:
Во-первых, индексы не сохраняются физически. В базе 1С индексы могут занимать от 30% до 60% всего объема данных. Утилита pg_dump выгружает только определения индексов (команды CREATE INDEX). Сами индексы будут перестроены заново только в момент восстановления из копии. Поэтому база в 200 Гб в «чистом» текстовом виде может весить около 120 Гб.
Во-вторых, эффективность сжатия. Данные 1С (тексты, числа, XML-структуры внутри полей) отлично сжимаются. Рассмотрим пример команды для создания сжатого бэкапа в кастомном формате:
# Запуск резервного копирования с использованием сжатия (-Fc)
# и указанием внешнего пути для сохранения
pg_dump -h localhost -U postgres -Fc -f /mnt/remote_storage/backup_1c_$(date +%Y%m%d).dump my_base_1c
При использовании флага -Fc файл бэкапа базы объемом 200 Гб может занять всего 30-50 Гб на целевом носителе.
Проанализируем оптимальную стратегию действий для системного администратора в описанной ситуации:
# Пример многопоточного копирования (в 4 потока)
pg_dump -h localhost -U postgres -Fd -j 4 -f /mnt/remote_storage/backup_dir my_base_1c
base/pgsql_tmp. Если бэкап запускается параллельно с работой пользователей, следите за объемом этой папки.max_wal_size настроен корректно, а на диске есть запас места (хотя бы 10-15% от объема БД) для маневра системы логирования.Таким образом, отвечая на исходный вопрос: 300 Гб свободного места при базе в 200 Гб — это вполне безопасная среда для создания логического бэкапа. Основная нагрузка будет ложиться не на дисковое пространство, а на дисковую подсистему (чтение/запись) и процессор (при использовании сжатия).