Ограничение количества памяти, потребляемой PostgreSQL
Чтобы ограничить количество памяти, потребляемой 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) могут потреблять дополнительную память. Настройте их параметры при необходимости.
Как применить изменения?
- Отредактируйте файл
postgresql.conf(обычно находится в/etc/postgresql/<версия>/main/или/var/lib/postgresql/data/). - Перезапустите PostgreSQL:
Дополнительные советы
- Мониторинг: Используйте утилиты
top,htop,pg_topилиpg_stat_activityдля отслеживания потребления памяти. - Логи: Включите легирование параметров памяти в
postgresql.conf:
log_min_duration_statement = 0 log_statement = 'all'
sudo systemctl restart postgresql
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.