Перейти к содержимому
VDS · Базы данных

Настройка памяти базы под вашу ступень

Конкретные значения буферов 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_bufferseffective_cache_sizework_memmaintenance_work_memmax_connections
VDS-1 (2 ГБ)384MB1GB8MB96MB40
VDS-2 (4 ГБ)1GB2GB12MB256MB60
VDS-3 (8 ГБ)2GB5GB16MB512MB100
VDS-4 (16 ГБ)4GB10GB24MB1GB150
VDS-5 (24 ГБ)6GB16GB32MB2GB200
VDS-6 (32 ГБ)8GB22GB48MB2GB250

Плюс общее для NVMe:

random_page_cost = 1.1
effective_io_concurrency = 200

work_mem выделяется на каждую операцию сортировки, а не на соединение: сто параллельных запросов со сложной сортировкой умножат его в сотни раз. Не завышайте.

Применение: systemctl restart postgresql (изменение shared_buffers требует именно перезапуска).

MySQL и MariaDB

Ступеньinnodb_buffer_pool_sizeinnodb_log_file_sizemax_connections
VDS-1512M128M60
VDS-21G256M100
VDS-33G512M150
VDS-48G1G200
VDS-512G1G250
VDS-618G2G300
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, машина свопит
Диск читается постоянноБуферы малы, рабочий набор не помещается

Если после настройки памяти всё равно упираетесь, дело в объёме данных, а не в конфиге. Улучшение тарифа доступно только вверх, с доплатой за оставшиеся дни оплаченного срока; понижение не предусмотрено, поэтому берите следующую ступень осознанно.