Как рассчитать оптимальное значение 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 под ваш сервер.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.