Ukaz Postgres EXPLAIN ANALIZE

Ukaz Postgres Explain Analize



Kar zadeva baze podatkov, je zmogljivost ena od lastnosti, ki ima visoko prednost. To zagotavlja, da lahko aplikacije poizvedujejo in zapisujejo podatke z največjo hitrostjo in učinkovitostjo.

Kot skrbniki baz podatkov moramo biti obsedeni z orodji in metodami za izboljšanje zmogljivosti baze podatkov.

V PostgreSQL imamo dostop do ukaza EXPLAIN ANALYZE, ki nam omogoča analizo načrta izvajanja in zmogljivosti dane poizvedbe po bazi podatkov. Ukaz vrne podrobne informacije o tem, kako mehanizem baze podatkov obdela poizvedbo. To vključuje zaporedje izvedenih operacij, ocenjene stroške poizvedb, čas izvajanja in drugo.







Te informacije lahko nato uporabimo za identifikacijo poizvedb v bazi podatkov ter za identifikacijo in odpravo morebitnih ozkih grl v delovanju.



Ta vadnica obravnava, kako uporabiti ukaz EXPLAIN ANALYZE v PostgreSQL za ogled in optimizacijo zmogljivosti poizvedbe.



PostgreSQL RAZLOŽI ANALIZIRAJ

Ukaz je precej preprost. Najprej moramo dodati ukaz EXPLAIN ANALYZE na začetek poizvedbe, ki jo želimo analizirati.





Sintaksa ukaza je naslednja:

EXPLAIN ANALIZE

Ko izvedete ukaz, PostgreSQL vrne podroben izhod o podani poizvedbi.



Razumevanje izhoda poizvedbe EXPLAIN ANALYZE

Kot že omenjeno, ko zaženemo ukaz EXPLAIN ANALYZE, PostgreSQL ustvari podrobno poročilo o načrtu poizvedbe in statistiki izvajanja.

Izhod je sestavljen iz niza stolpcev, ki vsebujejo koristne informacije. Nastali stolpci so, kot je prikazano, s svojimi ustreznimi pomeni:

NAČRT POVPRAŠEVANJA – Ta stolpec prikazuje načrt izvajanja podane poizvedbe. Izvedbeni načrt se nanaša na zaporedje operacij, ki jih mehanizem baze podatkov izvede za uspešno dokončanje poizvedbe.

NAČRTUJ – Drugi stolpec je stolpec NAČRT. To vsebuje besedilno predstavitev vsake operacije ali koraka v izvedbenem načrtu. Ponovno je vsaka operacija zamaknjena, da pokaže hierarhijo operacij.

SKUPNI STROŠKI – Stolpec s skupnimi stroški predstavlja ocenjene skupne stroške poizvedbe. Stroški se nanašajo na relativno merilo, ki ga načrtovalec poizvedb baze podatkov uporablja za določitev optimalnega načrta izvajanja.

DEJANSKE VRSTICE – Ta stolpec prikazuje natančno število vrstic, ki so obdelane v vsakem koraku izvajanja poizvedbe.

DEJAN ČAS – Ta stolpec prikazuje dejanski čas, ki ga porabi vsaka operacija, ki vključuje tako čas izvajanja operacije kot čas, porabljen za vire.

ČAS NAČRTOVANJA – Ta stolpec prikazuje čas, ki ga načrtovalec poizvedb potrebuje za ustvarjanje načrta izvajanja. To vključuje skupni čas optimizacije poizvedbe in generiranje načrta.

ČAS IZVEDBE – Ta stolpec prikazuje skupni čas za izvedbo poizvedbe. To vključuje tudi čas, porabljen za načrtovanje in čas izvedbe poizvedbe.

PostgreSQL RAZLOŽI ANALIZIRAJ Primer

Oglejmo si nekaj osnovnih primerov uporabe izjave EXPLAIN ANALIZE.

1. primer: izberite Izjavo
Uporabimo stavek EXPLAIN ANALYZE, da prikažemo izvajanje preprostega stavka select v PostgreSQL.

RAZLOŽI ANALIZIRAJ izberite * iz wp_users, kjer je id > 3;

Ko izvedemo prejšnji stavek, bi morali dobiti naslednji rezultat:

NAČRT POVPRAŠEVANJA
-------------------------------------------------- -----------------
Seq Scan on wp_users  (cost=0.00..10.38 rows=10 width=2256) (dejanski čas=0.009..0.010 rows=7 loops=1)
Filter: (id > 3)
Vrstice, ki jih je filter odstranil: 3
Čas načrtovanja: 0,995 ms
Čas izvedbe: 0,021 ms
(5 vrstic)

V tem primeru lahko vidimo, da razdelek Načrt poizvedbe kaže, da poizvedba izvaja zaporedno skeniranje tabele wp_users. Vrstica filtra označuje pogoj, ki se uporablja za filtriranje nastalih vrstic.

Nato vidimo »Vrstice, ki jih je filter odstranil«, ki prikazuje število vrstic, ki jih izloči pogoj filtra.

Nazadnje čas izvajanja prikazuje skupni čas izvajanja poizvedbe. V tem primeru poizvedba traja 0,021 ms.

Primer 2: Analiza spoja
Vzemimo bolj zapleteno poizvedbo, ki vključuje združevanje SQL. Za to uporabljamo vzorčno bazo Pagila. Vzorčno zbirko podatkov lahko prenesete in namestite na svoj računalnik za namen predstavitve.

Zaženemo lahko preprosto združevanje, kot je prikazano v naslednjem:

pojasni analiziraj IZBERI f.naslov, c.ime
IZ filma f
PRIDRUŽITE SE filmski_kategoriji fc ON f.film_id = fc.film_id
PRIDRUŽI se kategoriji c ON fc.category_id = c.category_id;

Ko zaženemo dano poizvedbo, bi morali videti izhod, kot sledi:

Raziščimo naslednji načrt poizvedbe:

  1. Ugnezdena zanka – To pomeni, da združevanje uporablja strategijo združevanja z ugnezdeno zanko.
  2. Zgoščevalno združevanje – ta operacija združuje film_category in filmske tabele z algoritmom zgoščevalnega združevanja. Ta operacija ima strošek 77,50 in ocenjenih 1000 vrstic. Vendar je dejanski čas, potreben za to operacijo, od 0,254 do 0,439 milisekunde in pridobi 1000 vrstic.
  3. Hash Cond – To označuje, da pogoj združevanja uporablja zgoščevanje za ujemanje s stolpcima film_id in film_category v tabelah filmov.
  4. Seq Scan on film_category – ta operacija izvede zaporedno skeniranje tabele film_category s ceno 16,00 in ocenjenimi 1000 vrsticami. Dejanski čas, potreben za to operacijo, je 0,008 do 0,056 milisekunde in pridobi 1000 vrstic.
  5. Zaporedno skeniranje na filmu – poizvedba izvede zaporedno skeniranje tabele filma s posledično ocenjenimi in dejanskimi stroški ter vrsticami v tej operaciji.
  6. Memoize – Ta operacija predpomni rezultate združevanja med tabelami film_category in film za nadaljnjo uporabo.
  7. Ključ predpomnilnika – to označuje, da ključ predpomnilnika, ki se uporablja za zapisovanje v spomin, temelji na stolpcu category_id iz film_category.
  8. Način predpomnilnika – To označuje, da poizvedba uporablja način logičnega predpomnilnika.
  9. Zadetki, zgrešitve, izločitve, prelivi – tri vrstice zagotavljajo statistične podatke o predpomnilniku, številu zadetkov, zgrešenih, izločitvah in prelivih med izvajanjem. Ta blok vključuje tudi uporabo pomnilnika med izvajanjem poizvedbe.
  10. Skeniranje indeksa z uporabo category_pkey – To prikazuje operacijo, ki izvede pregled indeksa v tabeli kategorij z uporabo indeksa primarnega ključa.
  11. Index Cond – To kaže, da skeniranje indeksa temelji na pogoju, ki se ujema s stolpcem category_id v tabeli kategorij.
  12. Čas načrtovanja – ta vrstica prikazuje čas, potreben za načrtovanje poizvedbe, ki je 3,005 milisekund.
  13. Izvedbeni čas – končno, ta vrstica prikazuje skupni čas izvajanja poizvedbe, ki je 0,745 milisekunde.

Tukaj imaš! Podrobne informacije o izvajanju preprostega združevanja v PostgreSQL.

Zaključek

Odkrili ste moč in uporabo stavka EXPLAIN ANALYZE v PostgreSQL. Stavek EXPLAIN ANALYZE je močno orodje za analizo in optimizacijo poizvedb. Uporabite to orodje za izdelavo učinkovitih poizvedb, ki zahtevajo manj virov.