Сжатие журнала транзакций WAL в PostgreSQL: Параметр wal_compression
- Аномально высокая генерация объема WAL-файлов (гигабайты в минуту) при интенсивных операциях
UPDATE/INSERT. - Канал передачи данных между Primary и Standby узлами перегружен трафиком репликации.
- Медленная архивация WAL на сервер резервного копирования через
archive_command.
1. Выбор алгоритма сжатия WAL в PostgreSQL
Начиная с PostgreSQL 15, поддерживаются современные быстрые алгоритмы компрессии полных образов страниц (Full Page Images):
off: Сжатие отключено (высокая нагрузка на диски);on / pglz: Встроенный алгоритм (базовая эффективность);lz4: Сверхбыстрое сжатие с минимальным потреблением CPU;zstd: Максимальный коэффициент сжатия при высокой производительности.
2. Настройка в postgresql.conf
# Включение современного сжатия Zstandard
wal_compression = zstd
# Связанные параметры журнала предзаписи
wal_buffers = 64MB
checkpoint_completion_target = 0.9
max_wal_size = 32GB
min_wal_size = 4GB3. Применение конфигурации
SELECT pg_reload_conf();4. Мониторинг генерации объема WAL
Проверьте текущую скорость записи LSN:
SELECT
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), '0/0000000')) AS total_wal_generated,
pg_walfile_name(pg_current_wal_lsn()) AS current_wal_file; Частые вопросы (FAQ)
Что именно сжимает параметр wal_compression?
Он сжимает полные образы страниц (Full Page Images, FPI), которые PostgreSQL записывает в WAL после каждого чекпоинта при первой модификации страницы, сокращая размер WAL на 30–60%.
Требуется ли перезапуск СУБД для изменения wal_compression?
Нет, параметр относится к классу sighup и применяется динамически командой SELECT pg_reload_conf();.
Создает ли wal_compression = zstd существенную нагрузку на CPU?
Нагрузка на CPU увеличивается незначительно (обычно < 3-5%), при этом за счет кратного снижения дискового I/O общая отзывчивость сервера возрастает.
Требуется ли поддержка LZ4/Zstandard на стороне реплики?
Да, исполняемые бинарные файлы PostgreSQL на реплике должны быть собраны с поддержкой соответствующих библиотек (liblz4, libzstd) для успешного разжатия WAL.