Проверить настройки памяти (shared_buffers, work_mem, maintenance_work_mem)
PostgreSQLПараметрыКоманда
SELECT name,
current_setting(name) AS value,
source,
context
FROM pg_settings
WHERE name IN ('shared_buffers', 'effective_cache_size', 'work_mem', 'hash_mem_multiplier',
'maintenance_work_mem', 'autovacuum_work_mem', 'max_connections',
'max_parallel_workers_per_gather', 'huge_pages', 'temp_buffers', 'wal_buffers')
ORDER BY name;
-- Rough ceilings: work_mem x max_connections and the autovacuum memory ceiling
SELECT pg_size_pretty(pg_size_bytes(current_setting('work_mem'))
* current_setting('max_connections')::int) AS work_mem_x_max_connections,
pg_size_pretty(pg_size_bytes(current_setting('maintenance_work_mem'))
* current_setting('autovacuum_max_workers')::int) AS autovacuum_mem_ceiling;
-- Trace of operations that did not fit in work_mem: temp files per database
SELECT datname, temp_files, pg_size_pretty(temp_bytes) AS temp_size, stats_reset
FROM pg_stat_database
WHERE datname IS NOT NULL
ORDER BY temp_bytes DESC;Что делает
Показывает параметры, связанные с памятью, с их значением, источником (по умолчанию/файл конфигурации) и контекстом изменения (postmaster = перезапуск); приблизительные потолки памяти для work_mem и autovacuum; объём временных файлов по базам данных.
Когда использовать
При вводе нового сервера, после добавления RAM, после срабатывания OOM killer или при интенсивном использовании временных файлов.
Внимание
work_mem выделяется не на подключение, а на УЗЕЛ сортировки/хэширования (для хэшей — с множителем hash_mem_multiplier) и отдельно для каждого параллельного рабочего процесса; сложный запрос может использовать несколько work_mem, поэтому вычисленное произведение — грубое предупреждение, а не верхняя граница. Типичные начальные значения: shared_buffers ~25% RAM (требуется перезапуск), effective_cache_size ~50-75% (лишь подсказка планировщику, ничего не выделяет), maintenance_work_mem 512MB-2GB. При autovacuum_work_mem = -1 каждый рабочий процесс autovacuum может использовать maintenance_work_mem. Если temp_bytes высокий, увеличивайте work_mem для роли или запроса, а не глобально. При больших shared_buffers в Linux рассмотрите huge_pages.