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

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

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

PG_TEMP_FILES_DISK_SPILL Linux / DevOps

Оптимизация временных файлов в PostgreSQL: мониторинг log_temp_files

Обновлено: 24.08.2026
  • Запросы выполняются медленно из-за интенсивных операций записи и чтения в каталоге base/pgsql_tmp.
  • В логах PostgreSQL появляются записи вида: LOG: temporary file: path "...", size 524288000 bytes.
  • Метрики temp_bytes и temp_files в pg_stat_database непрерывно растут.

1. Включение логирования генерации временных файлов

Отредактируйте postgresql.conf, чтобы логировать все временные файлы размером более 1MB:

# Логировать сброс на диск файлов от 1024 килобайт (0 = логировать все)
log_temp_files = 1024
log_min_duration_statement = 250
SELECT pg_reload_conf();

2. Анализ суммарного объема временных файлов по базам

SELECT datname, temp_files, pg_size_pretty(temp_bytes) AS temp_size
FROM pg_stat_database
ORDER BY temp_bytes DESC;

3. Поиск медленного запроса и анализ плана EXPLAIN

EXPLAIN (ANALYZE, BUFFERS)
SELECT customer_id, count(*), sum(amount)
FROM payments
GROUP BY customer_id
ORDER BY sum(amount) DESC;

Если в выводе присутствует Sort Method: external merge Disk: 15420kB вместо quicksort Memory, запросу не хватает work_mem.

4. Точечная корректировка памяти

Увеличьте work_mem для конкретного проблемного пользователя/сервиса:

ALTER USER reporting_service SET work_mem = '256MB';
💡 Практика специалистов: Параметр log_temp_files = 0 в сочетании с pg_stat_statements позволяет мгновенно обнаружить неоптимальные запросы без индексов, приводящие к неконтролируемому расходу дискового ввода-вывода.

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

Почему сброс сортировки на диск (external merge Disk) критичен для производительности?

Операции в оперативной памяти выполняются в сотни раз быстрее, чем создание, запись, повторное чтение и удаление временных файлов на дисковом накопителе.

Как ограничить максимальный размер временных файлов для защиты диска?

Задайте параметр temp_file_limit (в килобайтах) в postgresql.conf. При превышении лимита одним запросом PostgreSQL аварийно отменит этот запрос.

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