Nastavenie pamäte databázy pre tvoj tier
Konkrétne hodnoty bufferov pre PostgreSQL a MySQL pre VDS-1…VDS-6 a pravidlo na rozdelenie pamäte medzi databázu, aplikáciu a systém.
Aktualizované 23. augusta 2026
Predvolené nastavenia databázy sú navrhnuté tak, aby sa dali spustiť kdekoľvek, nie aby bežali rýchlo. Na VDS-3 s 8 GB pamäte používa PostgreSQL hneď po inštalácii 128 MB na cache — čiže takmer všetko číta z disku, hoci by mohol čítať z pamäte.
Pravidlo rozdeľovania
Pamäť daného tieru rozdeľ približne takto:
- systémové a servisné procesy — 10–15 %;
- aplikácia (PHP-FPM, Node, gunicorn) — podľa počtu workerov;
- databáza — všetko, čo zostane, ale nie viac než 60–70 % celkovej pamäte.
Databáze nikdy nedávaj všetku pamäť: systém začne swapovať a NVMe ti nepomôže — latencia narastie desaťnásobne.
Koľko sa používa práve teraz:
free -h
ps -eo pmem,rss,comm --sort=-rss | head
Grafy pamäte za hodinu, deň, týždeň a mesiac nájdeš v „Prehľade“ panela /hosting/vds/m/<id> — ukazujú reálny peak, nie aktuálny okamih.
PostgreSQL
/etc/postgresql/17/main/postgresql.conf:
| Tier | shared_buffers | effective_cache_size | work_mem | maintenance_work_mem | max_connections |
|---|---|---|---|---|---|
| VDS-1 (2 GB) | 384MB | 1GB | 8MB | 96MB | 40 |
| VDS-2 (4 GB) | 1GB | 2GB | 12MB | 256MB | 60 |
| VDS-3 (8 GB) | 2GB | 5GB | 16MB | 512MB | 100 |
| VDS-4 (16 GB) | 4GB | 10GB | 24MB | 1GB | 150 |
| VDS-5 (24 GB) | 6GB | 16GB | 32MB | 2GB | 200 |
| VDS-6 (32 GB) | 8GB | 22GB | 48MB | 2GB | 250 |
Plus všeobecné nastavenia pre NVMe:
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem sa prideľuje na jednu operáciu triedenia, nie na jedno spojenie: sto paralelných dotazov s komplexným triedením ho znásobí stonásobne. Nenastavuj ho príliš vysoko.
Aplikovanie: systemctl restart postgresql (zmena shared_buffers vyžaduje práve reštart).
MySQL a MariaDB
| Tier | 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
Buffer pool je hlavný parameter: ak sa doň zmestí pracovná množina dát, z disku sa číta len minimálne.
Kontrola účinku
SELECT sum(blks_hit)*100/sum(blks_hit+blks_read) FROM pg_stat_database;
Pri MySQL sa pozri na SHOW ENGINE INNODB STATUS a pomer Innodb_buffer_pool_reads k Innodb_buffer_pool_read_requests. Miera zásahov cache pod 95 % znamená, že databáza nemá dosť pamäte.
Časté chyby
| Príznak | Príčina |
|---|---|
| Databáza sa po úprave nespustí | Vyžiadaných viac pamäte, než je k dispozícii — skontroluj journal |
| Proces zabil OOM | Databáza, aplikácia a systém spolu prekračujú pamäť tieru |
| Po „optimalizácii“ je to pomalšie | work_mem je nastavené príliš vysoko, stroj swapuje |
| Z disku sa číta neustále | Buffery sú príliš malé, pracovná množina sa do nich nezmestí |
Ak po vyladení pamäte stále narážaš na strop, problémom je množstvo dát, nie konfigurácia. Môžeš len prejsť na vyšší plán, s pomernou platbou za zostávajúce dni zaplateného obdobia; prechod na nižší plán nie je možný, tak si ďalší tier vyber zámerne.