Налаштування пам'яті бази даних під ваш тариф
Конкретні значення буферів для 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_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% означає, що базі даних не вистачає пам'яті.
Типові помилки
| Симптом | Причина |
|---|---|
| База даних не запускається після правки | Запрошено більше пам'яті, ніж доступно — перевірте журнал |
| Процес убив OOM | База даних, застосунок і система разом перевищують пам'ять тарифу |
| Після «оптимізації» стало повільніше | work_mem завищений, машина пішла у swap |
| Диск постійно читається | Буфери замалі, робочий набір не вміщається |
Якщо після налаштування пам'яті ви все одно впираєтеся в стіну, проблема в обсязі даних, а не в конфігу. Залишається тільки перейти на тариф вище, з доплатою пропорційно до решти днів оплаченого строку; зниження тарифу недоступне, тож обирайте наступний тариф свідомо.