Profiler i popis procesa
Dva alata za pitanje „zašto je ovo sporo?" — jedan gleda upit, drugi server.
Profiler upita
Kliknite Profiler u alatnoj traci, ili gumb Explain u SQL editoru da naredbu na kojoj radite pošaljete izravno u njega. Možete i odabrati konekciju i bazu pa zalijepiti upit.
Plan se prikazuje kao graf: jedna kutija po operaciji, spojena s ulazima iz kojih vuče, pa se spajanje čita kao jedan čvor koji povlači iz dviju tablica umjesto kao uvlaka. Svaka kutija nosi tablicu, način pristupa, broj redaka i cijenu, uz obojenu traku koja je vaga prema najskupljem čvoru u planu. Klik na kutiju otvara puni detalj — uvjete, imena indeksa, brojeve blokova.
Isti je plan dostupan i kao stablo te kao sirovi izlaz servera.
Procjena ili mjerenje
Značka iznad plana govori što gledate:
- Procjena — nagađanje planera. Ništa nije izvršeno.
- Izmjereno — upit je stvarno izvršen, a kutije pokazuju stvarne brojeve redaka uz procjene.
Kvačica ANALYZE traži izmjereni plan. Hoćete li ga dobiti ovisi o serveru, a NabuSQL javlja na što je pristao umjesto da tiho spusti očekivanja:
| Baza | Izmjereni planovi |
|---|---|
| MySQL 8.3+ | Da, s punim grafom |
| MariaDB 10.1+ | Da, s punim grafom |
| MySQL 8.0.18+ | Da, ali server vraća samo tekst — bez grafa |
| Stariji MySQL / MariaDB | Ne — dobivate procjenu, jasno označenu |
| PostgreSQL | Da, uz brojeve blokova |
| SQLite | Plan izvođenja ne postoji |
SQL Server
SQL Server vraća tabelarni procijenjeni plan umjesto grafa. Čitanje njegova stvarnog plana traži SHOWPLAN_XML, koji NabuSQL zasad ne raščlanjuje — stranica to kaže umjesto da glumi graf.
Čitanje plana
Čvorovi vrijedni drugog pogleda označeni su s ⚠:
- Potpuni prolaz kroz tablicu — čita se cijela tablica ondje gdje ste očekivali dohvat po indeksu.
- Slaba selektivnost — indeks je korišten, ali gotovo ništa nije suzio.
- Procjena daleko od stvarnog — planer je očekivao red veličine drugačiji broj redaka. Obično zastarjela statistika, i razlog zašto je odabrao baš takav plan. Pokrenite ANALYZE nad tablicom pa pokušajte ponovno.
Vrijedi tražiti i cijenu koncentriranu u jednom čvoru — to je mjesto koje se prvo optimizira — te indeks koji postoji, ali se ne koristi, obično zato što WHERE omata stupac u funkciju ili ga uspoređuje s drugim tipom.
Nakon dodavanja indeksa u Tablice i stupci ponovno pokrenite profiler i potvrdite da se plan doista promijenio. Indeks koji planer ignorira košta vas pisanja, a ne donosi ništa.
Popis procesa
Desni klik na bazu pa Process List prikazuje što server upravo radi: spojene sesije, upite koje izvršavaju i koliko dugo traju.
Kill prekida sesiju. To je alat za odbjegli upit koji drži zaključavanja dok ostatak aplikacije čeka.
Prekid sesije znači rollback
Prekinutu transakciju server poništava, što kod dugog pisanja može trajati koliko i sama naredba. Prije prekidanja pogledajte što sesija radi.
Praktičan redoslijed
- Aplikacija je spora → Popis procesa: blokira li jedan upit sve ostalo?
- Određeni upit je spor → Profiler: gdje sjedi njegova cijena?
- Popravak — indeks, prepisan
WHERE, drugi redoslijed spajanja. - Ponovno pokrenite profiler i potvrdite da se plan promijenio.
