Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PG_CHECKPOINT_IO_SPIKE Linux / DevOps

Траблшутинг зависания контрольных точек в PostgreSQL: checkpoint_completion_target

Обновлено: 24.08.2026
  • Периодические резкие скачки дисковой задержки (I/O spikes) и рост времени выполнения запросов каждые 5–15 минут.
  • В логах PostgreSQL появляются предупреждения: LOG: checkpoints are occurring too frequently (X seconds apart).
  • Резкий рост показателя checkpoints_req в представлении pg_stat_bgwriter.

1. Анализ статистики контрольных точек

SELECT checkpoints_timed, checkpoints_req, 
       checkpoint_write_time, checkpoint_sync_time, 
       buffers_checkpoint, buffers_clean, maxwritten_clean
FROM pg_stat_bgwriter;

Если checkpoints_req сопоставим или превышает checkpoints_timed, контрольные точки происходят по исчерпанию лимита WAL, а не по расписанию.

2. Оптимизация параметров сглаживания I/O в postgresql.conf

# Размазывание записи «грязных» буферов на 90% интервала
checkpoint_completion_target = 0.9

# Увеличение интервала между плановыми чекпоинтами
checkpoint_timeout = 15min

# Увеличение объема генерации WAL до принудительного чекпоинта
max_wal_size = 16GB
min_wal_size = 2GB

# Настройка фонового писателя (Background Writer) для разгрузки чекпоинтов
bgwriter_delay = 20ms
bgwriter_lru_maxpages = 100
bgwriter_lru_multiplier = 2.0

# Логирование выполнения контрольных точек
log_checkpoints = on

3. Применение конфигурации

SELECT pg_reload_conf();

4. Мониторинг логов в реальном времени

tail -f /var/log/postgresql/postgresql-*.log | grep "checkpoint"
💡 Практика специалистов: Начиная с PostgreSQL 14 значение checkpoint_completion_target по умолчанию выставлено в 0.9. На более старых версиях (где дефолт 0.5) ручная корректировка до 0.9 обязательна для устранения дисковых заторов.

Частые вопросы (FAQ)

Что означает параметр checkpoint_completion_target = 0.9?

Он указывает ядру PostgreSQL распределять запись страниц контрольной точки на 90% времени, отведенного до следующего чекпоинта (например, 13.5 минут из 15), сглаживая пиковую нагрузку на накопители.

Чем грозит увеличение max_wal_size до 32GB или 64GB?

Увеличение max_wal_size снижает частоту внеплановых чекпоинтов и сглаживает I/O, однако увеличивает время аварийного восстановления (Crash Recovery) при внезапном падении сервера.

Полезные материалы
Рекомендуем