Naredba Postgres EXPLAIN ANALIZE

Naredba Postgres Explain Analize



Što se tiče baza podataka, performanse su značajke koje imaju visok prioritet. To osigurava da aplikacije mogu postavljati upite i pisati podatke s maksimalnom brzinom i učinkovitošću.

Kao administratori baze podataka, moramo biti opsjednuti alatima i metodama poboljšanja performansi baze podataka.

U PostgreSQL-u imamo pristup naredbi EXPLAIN ANALYZE koja nam omogućuje analizu plana izvršenja i izvedbe zadanog upita baze podataka. Naredba vraća detaljne informacije o tome kako motor baze podataka obrađuje upit. To uključuje redoslijed izvršenih operacija, procijenjene troškove upita, vrijeme izvršenja i još mnogo toga.







Zatim možemo upotrijebiti te informacije za prepoznavanje upita baze podataka, kao i za prepoznavanje i popravljanje potencijalnih uskih grla u izvedbi.



Ovaj vodič govori o tome kako koristiti naredbu EXPLAIN ANALYZE u PostgreSQL-u za pregled i optimizaciju izvedbe upita.



PostgreSQL OBJASNI ANALIZIRAJ

Naredba je prilično jednostavna. Prvo, moramo dodati naredbu EXPLAIN ANALYZE na početku upita koji želimo analizirati.





Sintaksa naredbe je sljedeća:

OBJASNITI ANALIZIRATI

Nakon što izvršite naredbu, PostgreSQL vraća detaljan izlaz o dostavljenom upitu.



Razumijevanje izlaza upita EXPLAIN ANALIZE

Kao što je spomenuto, nakon što pokrenemo naredbu EXPLAIN ANALYZE, PostgreSQL generira detaljno izvješće o planu upita i statistici izvršenja.

Izlaz se sastoji od skupa stupaca koji sadrže korisne informacije. Rezultirajući stupci prikazani su sa svojim odgovarajućim značenjem:

PLAN UPITA – Ovaj stupac prikazuje plan izvršenja navedenog upita. Plan izvršenja odnosi se na niz operacija koje motor baze podataka izvodi kako bi uspješno dovršio upit.

PLAN – Drugi stupac je stupac PLAN. Ovo sadrži tekstualni prikaz svake operacije ili koraka u planu izvršenja. Opet, svaka operacija je uvučena da označi hijerarhiju operacija.

UKUPNI TROŠAK – Stupac ukupne cijene predstavlja procijenjenu ukupnu cijenu upita. Trošak se odnosi na relativnu mjeru koju planer upita baze podataka koristi za određivanje optimalnog plana izvršenja.

STVARNI REDOVI – Ovaj stupac prikazuje točan broj redaka koji se obrađuju u svakom koraku u izvršavanju upita.

STVARNO VRIJEME – Ovaj stupac prikazuje stvarno vrijeme potrebno za svaku operaciju koje uključuje i vrijeme izvršenja operacije i vrijeme potrošeno na resurse.

VRIJEME PLANIRANJA – Ovaj stupac prikazuje vrijeme koje je planeru upita potrebno za generiranje plana izvršenja. To uključuje ukupno vrijeme optimizacije upita i generiranja plana.

VRIJEME IZVRŠAVANJA – Ovaj stupac prikazuje ukupno vrijeme za izvršenje upita. Ovo također uključuje vrijeme potrošeno na planiranje i vrijeme izvršenja upita.

PostgreSQL OBJASNITI ANALIZIRATI Primjer

Pogledajmo neke osnovne primjere korištenja naredbe EXPLAIN ANALIZE.

Primjer 1: Odaberite izjavu
Upotrijebimo naredbu EXPLAIN ANALYZE da pokažemo izvođenje jednostavne naredbe select u PostgreSQL-u.

OBJASNI ANALIZIRAJ odaberite * iz wp_users gdje je id > 3;

Nakon što pokrenemo prethodnu izjavu, trebali bismo dobiti sljedeći izlaz:

PLAN UPITA
-------------------------------------------------- -----------------
Seq Scan on wp_users  (cost=0.00..10.38 rows=10 width=2256) (stvarno vrijeme=0.009..0.010 rows=7 loops=1)
Filter: (id > 3)
Retci uklonjeni filtrom: 3
Vrijeme planiranja: 0,995 ms
Vrijeme izvršenja: 0,021 ms
(5 redaka)

U ovom slučaju možemo vidjeti da odjeljak Plan upita pokazuje da upit izvodi sekvencijalno skeniranje tablice wp_users. Redak filtra označava uvjet koji se koristi za filtriranje rezultirajućih redaka.

Zatim vidimo 'Retke uklonjene filtrom' koji pokazuju broj redaka koji su eliminirani uvjetom filtra.

Konačno, vrijeme izvršenja pokazuje ukupno vrijeme izvršenja upita. U ovom slučaju, upit traje 0,021 ms.

Primjer 2: Analiza spoja
Uzmimo složeniji upit koji uključuje SQL spajanje. Za to koristimo Pagila uzorak baze podataka. Možete preuzeti i instalirati oglednu bazu podataka na svoje računalo u svrhu demonstracije.

Možemo pokrenuti jednostavno spajanje kao što je prikazano u nastavku:

objasniti analizirati SELECT f.title, c.name
IZ filma f
PRIDRUŽITE SE film_kategoriji fc ON f.film_id = fc.film_id
PRIDRUŽITE se kategoriji c NA fc.category_id = c.category_id;

Nakon što pokrenemo zadani upit, trebali bismo vidjeti sljedeći rezultat:

Istražimo sljedeći plan upita:

  1. Ugniježđena petlja – Ovo označava da spajanje koristi strategiju spajanja ugniježđene petlje.
  2. Hash Join – Ova operacija spaja film_category i filmske tablice pomoću algoritma Hash join. Ova operacija ima trošak od 77,50 i procijenjenih 1000 redaka. Međutim, stvarno vrijeme potrebno za ovu operaciju je 0,254 do 0,439 milisekundi, a dohvaća 1000 redaka.
  3. Hash Cond – Ovo označava da uvjet spajanja koristi Hash join za podudaranje sa stupcima film_id i film_category u tablicama filmova.
  4. Seq Scan on film_category – Ova operacija izvodi sekvencijalno skeniranje na tablici film_category s cijenom od 16,00 i procijenjenih 1000 redaka. Stvarno vrijeme potrebno za ovu operaciju je 0,008 do 0,056 milisekundi, a dohvaća 1000 redaka.
  5. Seq Scan on film – Upit izvodi sekvencijalno skeniranje tablice filma s rezultirajućim procijenjenim i stvarnim troškovima i redcima u ovoj operaciji.
  6. Memoize – Ova operacija sprema rezultate spajanja između film_category i filmskih tablica za kasniju upotrebu.
  7. Ključ predmemorije – Ovo označava da se ključ predmemorije koji se koristi za memoizaciju temelji na stupcu category_id iz kategorije film_category.
  8. Način predmemorije – Ovo označava da upit koristi način logičke predmemorije.
  9. Pogoci, promašaji, izbacivanja, preljevi – tri retka pružaju statistiku o predmemorij, broj pogodaka, promašaja, izbacivanja i preljeva tijekom izvršenja. Ovaj blok također uključuje korištenje memorije tijekom izvršavanja upita.
  10. Skeniranje indeksa pomoću category_pkey – Ovo pokazuje operaciju koja izvodi skeniranje indeksa na tablici kategorija pomoću indeksa primarnog ključa.
  11. Index Cond – Ovo pokazuje da se skeniranje indeksa temelji na uvjetu koji odgovara stupcu category_id u tablici kategorije.
  12. Vrijeme planiranja – Ovaj redak prikazuje vrijeme potrebno za planiranje upita koje iznosi 3,005 milisekundi.
  13. Vrijeme izvršenja – Konačno, ovaj redak prikazuje ukupno vrijeme izvršenja upita koje iznosi 0,745 milisekundi.

Eto ga! Detaljne informacije o izvršavanju jednostavnog spajanja u PostgreSQL-u.

Zaključak

Otkrili ste snagu i upotrebu naredbe EXPLAIN ANALYZE u PostgreSQL-u. Naredba EXPLAIN ANALYZE moćan je alat za analizu i optimizaciju upita. Koristite ovaj alat za izradu učinkovitih upita koji zahtijevaju manje resursa.