Skip to content

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:

BazaIzmjereni 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 / MariaDBNe — dobivate procjenu, jasno označenu
PostgreSQLDa, uz brojeve blokova
SQLitePlan 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 ​

  1. Aplikacija je spora → Popis procesa: blokira li jedan upit sve ostalo?
  2. Određeni upit je spor → Profiler: gdje sjedi njegova cijena?
  3. Popravak — indeks, prepisan WHERE, drugi redoslijed spajanja.
  4. Ponovno pokrenite profiler i potvrdite da se plan promijenio.