Skip to content
VDS · Бази даних

Налаштування пам'яті бази даних під ваш тариф

Конкретні значення буферів для PostgreSQL і MySQL для VDS-1…VDS-6 та правило розподілу пам'яті між базою даних, застосунком і системою.

Оновлено 23 серпня 2026 р.

Стандартні налаштування бази даних розраховані на те, щоб запуститися будь-де, а не на швидку роботу. На VDS-3 з 8 ГБ пам'яті PostgreSQL одразу після встановлення використовує 128 МБ під кеш — тобто читає майже все з диска, хоча міг би читати з пам'яті.

Правило розподілу

Розділіть пам'ять тарифу приблизно так:

  • системні та службові процеси — 10–15%;
  • застосунок (PHP-FPM, Node, gunicorn) — за кількістю воркерів;
  • база даних — усе, що залишилося, але не більше ніж 60–70% від загальної пам'яті.

Ніколи не віддавайте базі даних усю пам'ять: система піде у swap, і 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% означає, що базі даних не вистачає пам'яті.

Типові помилки

СимптомПричина
База даних не запускається після правкиЗапрошено більше пам'яті, ніж доступно — перевірте журнал
Процес убив OOMБаза даних, застосунок і система разом перевищують пам'ять тарифу
Після «оптимізації» стало повільнішеwork_mem завищений, машина пішла у swap
Диск постійно читаєтьсяБуфери замалі, робочий набір не вміщається

Якщо після налаштування пам'яті ви все одно впираєтеся в стіну, проблема в обсязі даних, а не в конфігу. Залишається тільки перейти на тариф вище, з доплатою пропорційно до решти днів оплаченого строку; зниження тарифу недоступне, тож обирайте наступний тариф свідомо.