Skip to content
VDS · Baze podataka

Podešavanje memorije baze za tvoj tier

Konkretne vrednosti bafera za PostgreSQL i MySQL za VDS-1…VDS-6 i pravilo za raspodelu memorije između baze, aplikacije i sistema.

Ažurirano 23. avgust 2026.

Podrazumevana podešavanja baze podataka su napravljena da mogu da se pokrenu bilo gde, a ne da rade brzo. Na VDS-3 sa 8 GB memorije, PostgreSQL odmah nakon instalacije koristi 128 MB za keš — što znači da skoro sve čita sa diska, iako bi mogao iz memorije.

Pravilo raspodele

Memoriju tarifnog plana podeli otprilike ovako:

  • sistemski i servisni procesi — 10–15%;
  • aplikacija (PHP-FPM, Node, gunicorn) — prema broju radnika;
  • baza podataka — sve što ostane, ali ne više od 60–70% ukupne memorije.

Nikad ne daj bazi svu memoriju: sistem će otići u swap, a NVMe ti neće pomoći — latencija će porasti desetine puta.

Koliko je trenutno zauzeto:

free -h
ps -eo pmem,rss,comm --sort=-rss | head

Grafikoni memorije za sat, dan, nedelju i mesec dostupni su u „Pregledu“ panela /hosting/vds/m/<id> — oni pokazuju pravi vrhunac, a ne trenutni momenat.

PostgreSQL

/etc/postgresql/17/main/postgresql.conf:

Tarifni planshared_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 opšta NVMe podešavanja:

random_page_cost = 1.1
effective_io_concurrency = 200

work_mem se dodeljuje po operaciji sortiranja, a ne po konekciji: sto paralelnih upita sa složenim sortiranjem umnožiće ga stotine puta. Ne postavljaj ga previsoko.

Primena: systemctl restart postgresql (promena shared_buffers zahteva baš restart).

MySQL i MariaDB

Tarifni planinnodb_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 glavni parametar: ako u njega stane radni skup podataka, disk se skoro ne čita.

Provera efekta

SELECT sum(blks_hit)*100/sum(blks_hit+blks_read) FROM pg_stat_database;

Za MySQL pogledaj SHOW ENGINE INNODB STATUS i odnos Innodb_buffer_pool_reads prema Innodb_buffer_pool_read_requests. Stopa pogodaka keša ispod 95% znači da baza nema dovoljno memorije.

Česte greške

SimptomUzrok
Baza neće da se pokrene posle izmeneTraži više memorije nego što je dostupno — proveri journal
Proces je ubio OOMBaza, aplikacija i sistem zajedno premašuju memoriju tarifnog plana
Posle „optimizacije“ radi sporijework_mem je postavljen previsoko, mašina swapuje
Disk se stalno čitaBaferi su premali, radni skup ne staje u njih

Ako i posle podešavanja memorije udaraš u zid, problem je količina podataka, a ne konfiguracija. Možeš samo da pređeš na jači plan, uz srazmerno plaćanje za preostale dane plaćenog perioda; prelazak na slabiji plan nije dostupan, pa sledeći tarifni plan biraj pažljivo.