Как рассчитать оптимальное значение shared_buffers для базы данных PostgreSQL исходя из общего объема оперативной памяти сервера (правило 25%)?
Параметр shared_buffers в PostgreSQL определяет объём оперативной памяти, выделяемой для кэширования данных непосредственно сервером баз данных. Правильная настройка этого параметра — один из ключевых шагов при оптимизации производительности PostgreSQL.
## Правило 25%
Общепринятая рекомендация от разработчиков PostgreSQL и сообщества DBA: устанавливать shared_buffers равным примерно 25% (одной четверти) от общего объёма оперативной памяти сервера. Это правило работает хорошо в большинстве случаев, когда PostgreSQL является основным или единственным приложением на сервере.
### Формула расчёта
shared_buffers = Общий объём RAM × 0.25
### Примеры расчёта
| Объём RAM | shared_buffers (25%) |
|————|———————-|
| 4 ГБ | 1 ГБ |
| 8 ГБ | 2 ГБ |
| 16 ГБ | 4 ГБ |
| 32 ГБ | 8 ГБ |
| 64 ГБ | 16 ГБ |
| 128 ГБ | 32 ГБ |
## Как изменить параметр
Значение задаётся в файле конфигурации `postgresql.conf`:
shared_buffers = 4GB
После изменения необходим перезапуск PostgreSQL:
bash
sudo systemctl restart postgresql
## Почему именно 25%, а не больше?
PostgreSQL активно использует файловый кэш операционной системы (page cache). Если выделить под shared_buffers слишком много памяти, ОС получит меньше ресурсов для собственного кэширования, что может привести к обратному эффекту — замедлению работы. Поэтому оставшиеся 75% RAM позволяют ОС эффективно кэшировать данные на уровне файловой системы.
## Когда стоит отклониться от правила 25%
— **Сервер с большим объёмом RAM (>256 ГБ):** значение shared_buffers свыше 40–64 ГБ редко даёт ощутимый прирост, можно ограничиться 15–20%.
— **Сервер с малым объёмом RAM (<2 ГБ):** минимальное рекомендуемое значение — 128 МБ, но 25% от 1 ГБ (256 МБ) вполне приемлемо.
— **Несколько приложений на сервере:** уменьшите долю до 15–20%, чтобы не вытеснять другие процессы.
— **OLAP-нагрузка с большими аналитическими запросами:** иногда оправдано увеличение до 30–40%.
## Связанные параметры
После настройки shared_buffers рекомендуется также скорректировать:
— `effective_cache_size` — обычно устанавливается в 50–75% от RAM (подсказка планировщику).
— `work_mem` — память для сортировок и хэш-операций на одно соединение.
— `maintenance_work_mem` — память для операций VACUUM, CREATE INDEX и др.
Используйте инструмент **PGTune** (pgtune.leopard.in.ua) для автоматического расчёта всех ключевых параметров PostgreSQL под ваш сервер.
