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 plan | 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 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 plan | 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 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
| Simptom | Uzrok |
|---|---|
| Baza neće da se pokrene posle izmene | Traži više memorije nego što je dostupno — proveri journal |
| Proces je ubio OOM | Baza, aplikacija i sistem zajedno premašuju memoriju tarifnog plana |
| Posle „optimizacije“ radi sporije | work_mem je postavljen previsoko, mašina swapuje |
| Disk se stalno čita | Baferi 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.