Ограничение количества памяти, потребляемой PostgreSQL

  • Михаил
  • 8 мин. на прочтение
  • 9
  • 31 Oct 2025
  • 31 Oct 2025

Чтобы ограничить количество памяти, потребляемой PostgreSQL, и предотвратить её полное использование на сервере, нужно правильно настроить параметры конфигурации в файле postgresql.conf. Вот основные параметры, которые отвечают за управление памятью:


1. shared_buffers

Определяет объём памяти, который PostgreSQL использует для кэширования данных. Рекомендация: Установите значение в пределах 25% от общей оперативной памяти сервера (но не более 8–16 ГБ, если у вас не очень большой сервер). Пример:

shared_buffers = 2GB


2. work_mem

Определяет объём памяти, выделяемый для сложных операций (сортировка, хэш-таблицы, слияния). Рекомендация: Установите значение в пределах 1–10% от общей оперативной памяти, но не более 100–200 МБ для большинства задач. Пример:

work_mem = 16MB


3. maintenance_work_mem

Используется для операций обслуживания (VACUUM, CREATE INDEX, ALTER TABLE). Рекомендация: Установите значение в пределах 10–20% от общей оперативной памяти, но не менее 1 ГБ для больших баз данных. Пример:

maintenance_work_mem = 512MB


4. effective_cache_size

Сообщает PostgreSQL, сколько памяти доступно для кэширования диска (включая ОС и PostgreSQL). Рекомендация: Установите значение в пределах 50–75% от общей оперативной памяти. Пример:

effective_cache_size = 4GB


5. Ограничение памяти для фона (background writer, autovacuum и т.д.)

  • bgwriter_delay — задержка между циклами записи фона.
  • autovacuum_work_mem — память для авто-очистки (по умолчанию -1, использует maintenance_work_mem).

6. Ограничение памяти для соединений

  • max_connections — максимальное количество подключений. Чем больше подключений, тем больше памяти потребуется.
  • max_worker_processes — ограничивает количество фоновых процессов.

7. Ограничение памяти для расширений

Некоторые расширения (например, pg_stat_statements) могут потреблять дополнительную память. Настройте их параметры при необходимости.


Как применить изменения?

  1. Отредактируйте файл postgresql.conf (обычно находится в /etc/postgresql/<версия>/main/ или /var/lib/postgresql/data/).
  2. Перезапустите PostgreSQL:

Дополнительные советы

  • Мониторинг: Используйте утилиты top, htop, pg_top или pg_stat_activity для отслеживания потребления памяти.
  • Логи: Включите легирование параметров памяти в postgresql.conf:

log_min_duration_statement = 0 log_statement = 'all'

sudo systemctl restart postgresql