Postgres EXPLAIN ANALYZE Kommando

Postgres Explain Analyze Kommando



Med hensyn til databaser er ydeevne en funktion, der har høj prioritet. Dette sikrer, at applikationerne kan forespørge og skrive dataene med maksimal hastighed og effektivitet.

Som databaseadministratorer skal vi være besat af værktøjerne og metoderne til at forbedre databasens ydeevne.

I PostgreSQL har vi adgang til kommandoen EXPLAIN ANALYZE, der giver os mulighed for at analysere eksekveringsplanen og udførelsen af ​​en given databaseforespørgsel. Kommandoen returnerer en detaljeret information om, hvordan databasemotoren behandler forespørgslen. Dette inkluderer rækkefølgen af ​​udførte operationer, estimerede forespørgselsomkostninger, eksekveringstidspunkt og mere.







Vi kan derefter bruge disse oplysninger til at identificere databaseforespørgslerne samt identificere og rette de potentielle flaskehalse i ydeevnen.



Denne tutorial diskuterer, hvordan man bruger kommandoen EXPLAIN ANALYZE i PostgreSQL til at se og optimere forespørgselsydeevnen.



PostgreSQL FORKLAR ANALYSE

Kommandoen er ret ligetil. Først skal vi sætte kommandoen EXPLAIN ANALYZE foran i begyndelsen af ​​den forespørgsel, som vi ønsker at analysere.





Kommandosyntaksen er som følger:

FORKLARING ANALYSE

Når du udfører kommandoen, returnerer PostgreSQL et detaljeret output om den angivne forespørgsel.



Forståelse af EXPLAIN ANALYZE Query Output

Som nævnt, når vi kører kommandoen EXPLAIN ANALYZE, genererer PostgreSQL en detaljeret rapport over forespørgselsplanen og eksekveringsstatistikken.

Outputtet består af et sæt kolonner, der indeholder nyttig information. De resulterende kolonner er som vist med deres respektive betydning:

FORESPØRGSPLAN – Denne kolonne viser udførelsesplanen for den angivne forespørgsel. Udførelsesplanen refererer til en sekvens af operationer, som databasemotoren udfører for at fuldføre forespørgslen med succes.

PLAN – Den anden kolonne er PLAN-kolonnen. Dette indeholder en tekstlig repræsentation af hver operation eller trin i udførelsesplanen. Igen er hver operation indrykket for at angive hierarkiet af operationer.

UDGIFTER I ALT – Kolonnen samlede omkostninger repræsenterer de anslåede samlede omkostninger for forespørgslen. Omkostningerne refererer til et relativt mål, som databaseforespørgselsplanlæggeren bruger til at bestemme den optimale eksekveringsplan.

FAKTISKE RÆKKER – Denne kolonne viser det nøjagtige antal rækker, der behandles ved hvert trin i forespørgselsudførelsen.

FAKTISK TID – Denne kolonne viser den faktiske tid, som hver operation tager, hvilket inkluderer både udførelsestiden for operationen og den tid, der bruges på ressourcer.

PLANLÆGNINGSTID – Denne kolonne viser den tid, det tager forespørgselsplanlæggeren at generere en eksekveringsplan. Dette inkluderer den samlede tid for forespørgselsoptimeringen og plangenereringen.

UDFØRELSESTID – Denne kolonne viser den samlede tid til at udføre forespørgslen. Dette inkluderer også den tid, der bruges på planlægning og udførelse af forespørgsler.

PostgreSQL FORKLARING ANALYSE Eksempel

Lad os se på nogle grundlæggende eksempler på brug af EXPLAIN ANALYZE-sætningen.

Eksempel 1: Vælg Statement
Lad os bruge EXPLAIN ANALYZE-sætningen til at vise udførelsen af ​​en simpel select-sætning i PostgreSQL.

FORKLARING ANALYSE vælg * fra wp_users hvor id > 3;

Når vi har kørt den forrige sætning, skulle vi få et output som følger:

FORESPØRGSPLAN
-------------------------------------------------- ------------------
Seq Scan på wp_users  (pris=0.00..10.38 rækker=10 bredde=2256) (faktisk tid=0.009..0.010 rækker=7 sløjfer=1)
Filter: (id > 3)
Rækker fjernet med filter: 3
Planlægningstid: 0,995 ms
Udførelsestid: 0,021 ms
(5 rækker)

I dette tilfælde kan vi se, at sektionen Forespørgselsplan angiver, at forespørgslen udfører en sekventiel scanning på wp_users-tabellen. Filterlinjen angiver den betingelse, der bruges til at filtrere de resulterende rækker.

Vi ser derefter 'Rækker fjernet af filter', som viser antallet af rækker, der er elimineret af filterbetingelsen.

Endelig viser eksekveringstiden den samlede udførelsestid for forespørgslen. I dette tilfælde tager forespørgslen 0,021ms.

Eksempel 2: Analyse af en Join
Lad os tage en mere kompleks forespørgsel, der involverer en SQL-join. Til dette bruger vi Pagila-eksempeldatabasen. Du kan downloade og installere prøvedatabasen på din maskine til demonstrationsformål.

Vi kan køre en simpel join som vist i følgende:

forklar analyser SELECT f.title, c.name
FRA film f
JOIN film_category fc ON f.film_id = fc.film_id
JOIN kategori c PÅ fc.category_id = c.category_id;

Når vi har kørt den givne forespørgsel, bør vi se output som følger:

Lad os undersøge følgende forespørgselsplan:

  1. Indlejret sløjfe – Dette indikerer, at joinforbindelsen bruger en indlejret sløjfe-sammenføjningsstrategi.
  2. Hash Join – Denne operation forbinder film_category og filmtabellerne ved hjælp af en Hash join-algoritme. Denne operation har en pris på 77,50 og anslået 1000 rækker. Den faktiske tid, det tager for denne operation, er dog 0,254 til 0,439 millisekunder, og den henter 1000 rækker.
  3. Hash Cond – Dette indikerer, at join-betingelsen bruger en Hash-join til at matche film_id-kolonnerne og film_category-kolonnerne i filmtabellerne.
  4. Seq Scan on film_category – Denne operation udfører en sekventiel scanning på filmen_category tabellen med en pris på 16,00 og anslået 1000 rækker. Den faktiske tid, det tager for denne operation, er 0,008 til 0,056 millisekunder, og den henter 1000 rækker.
  5. Seq Scan på film – Forespørgslen udfører en sekventiel scanning på filmtabellen med de resulterende estimerede og faktiske omkostninger og rækker i denne operation.
  6. Memoize – Denne handling gemmer resultaterne af joinforbindelsen mellem film_category og filmtabeller til efterfølgende brug.
  7. Cache-nøgle – Dette indikerer, at den cache-nøgle, der bruges til huskeseddel, er baseret på kategori_id-kolonnen fra film_kategori.
  8. Cachetilstand – Dette indikerer, at forespørgslen bruger den logiske cachetilstand.
  9. Hits, Misses, Evictions, Overflows – De tre linjer giver statistik om cachen, antallet af hits, misses, udsættelser og overløb under henrettelsen. Denne blok inkluderer også hukommelsesforbruget under udførelse af forespørgsler.
  10. Indeksscanning med kategori_pkey – Dette viser den operation, der udfører en indeksscanning på kategoritabellen ved hjælp af det primære nøgleindeks.
  11. Index Cond – Dette viser, at indeksscanningen er baseret på den betingelse, der matcher kategori_id-kolonnen i kategoritabellen.
  12. Planlægningstid – Denne linje viser den tid, det tager for forespørgselsplanlægning, som er 3,005 millisekunder.
  13. Udførelsestid - Endelig viser denne linje den samlede udførelsestid for forespørgslen, som er 0,745 millisekunder.

Der har du det! En detaljeret information om udførelsen af ​​en simpel join i PostgreSQL.

Konklusion

Du opdagede styrken og brugen af ​​EXPLAIN ANALYZE-sætningen i PostgreSQL. EXPLAIN ANALYZE-sætningen er et kraftfuldt værktøj til forespørgselsanalyse og optimering. Brug dette værktøj til at bygge effektive og mindre ressourcekrævende forespørgsler.