Настройка памяти базы под вашу ступень
Конкретные значения буферов PostgreSQL и MySQL для VDS-1…VDS-6, правило распределения памяти между базой, приложением и системой.
Обновлено 23 августа 2026 г.
Настройки баз по умолчанию рассчитаны на то, чтобы запуститься где угодно, а не работать быстро. На VDS-3 с 8 ГБ памяти PostgreSQL из коробки использует 128 МБ под кэш — то есть почти всё читает с диска, хотя мог бы из памяти.
Правило распределения
Разделите память ступени примерно так:
- система и служебные процессы — 10–15 %;
- приложение (PHP-FPM, Node, gunicorn) — по числу воркеров;
- база — то, что осталось, но не больше 60–70 % от всей памяти.
Никогда не отдавайте базе всю память: система уйдёт в своп, и NVMe вам не поможет — задержки вырастут в десятки раз.
Сколько занято сейчас:
free -h
ps -eo pmem,rss,comm --sort=-rss | head
Графики памяти за час, сутки, неделю и месяц есть в «Обзоре» панели /hosting/vds/m/<id> — по ним видно реальный пик, а не текущий момент.
PostgreSQL
/etc/postgresql/17/main/postgresql.conf:
| Ступень | shared_buffers | effective_cache_size | work_mem | maintenance_work_mem | max_connections |
|---|---|---|---|---|---|
| VDS-1 (2 ГБ) | 384MB | 1GB | 8MB | 96MB | 40 |
| VDS-2 (4 ГБ) | 1GB | 2GB | 12MB | 256MB | 60 |
| VDS-3 (8 ГБ) | 2GB | 5GB | 16MB | 512MB | 100 |
| VDS-4 (16 ГБ) | 4GB | 10GB | 24MB | 1GB | 150 |
| VDS-5 (24 ГБ) | 6GB | 16GB | 32MB | 2GB | 200 |
| VDS-6 (32 ГБ) | 8GB | 22GB | 48MB | 2GB | 250 |
Плюс общее для NVMe:
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem выделяется на каждую операцию сортировки, а не на соединение: сто параллельных запросов со сложной сортировкой умножат его в сотни раз. Не завышайте.
Применение: systemctl restart postgresql (изменение shared_buffers требует именно перезапуска).
MySQL и MariaDB
| Ступень | innodb_buffer_pool_size | innodb_log_file_size | max_connections |
|---|---|---|---|
| VDS-1 | 512M | 128M | 60 |
| VDS-2 | 1G | 256M | 100 |
| VDS-3 | 3G | 512M | 150 |
| VDS-4 | 8G | 1G | 200 |
| VDS-5 | 12G | 1G | 250 |
| VDS-6 | 18G | 2G | 300 |
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 2000
Буферный пул — главный параметр: если он вмещает рабочий набор данных, диск почти не читается.
Проверка эффекта
SELECT sum(blks_hit)*100/sum(blks_hit+blks_read) FROM pg_stat_database;
Для MySQL смотрите SHOW ENGINE INNODB STATUS и отношение Innodb_buffer_pool_reads к Innodb_buffer_pool_read_requests. Доля попаданий в кэш ниже 95 % означает, что памяти базе мало.
Частые ошибки
| Симптом | Причина |
|---|---|
| База не стартует после правки | Запрошено больше памяти, чем есть — смотрите journal |
| Процесс убит по OOM | Сумма базы, приложения и системы больше памяти ступени |
| Стало медленнее после «оптимизации» | Завышен work_mem, машина свопит |
| Диск читается постоянно | Буферы малы, рабочий набор не помещается |
Если после настройки памяти всё равно упираетесь, дело в объёме данных, а не в конфиге. Улучшение тарифа доступно только вверх, с доплатой за оставшиеся дни оплаченного срока; понижение не предусмотрено, поэтому берите следующую ступень осознанно.