Skip to content
VDS · Databázy

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:

Tiershared_bufferseffective_cache_sizework_memmaintenance_work_memmax_connections
VDS-1 (2 GB)384MB1GB8MB96MB40
VDS-2 (4 GB)1GB2GB12MB256MB60
VDS-3 (8 GB)2GB5GB16MB512MB100
VDS-4 (16 GB)4GB10GB24MB1GB150
VDS-5 (24 GB)6GB16GB32MB2GB200
VDS-6 (32 GB)8GB22GB48MB2GB250

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

Tierinnodb_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

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íznakPríčina
Databáza sa po úprave nespustíVyžiadaných viac pamäte, než je k dispozícii — skontroluj journal
Proces zabil OOMDatabáza, aplikácia a systém spolu prekračujú pamäť tieru
Po „optimalizácii“ je to pomalšiework_mem je nastavené príliš vysoko, stroj swapuje
Z disku sa číta neustáleBuffery 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.