Postgres EXPLAIN ANALYZE parancs

Postgres Explain Analyze Parancs



Ami az adatbázisokat illeti, a teljesítmény az egyik olyan szolgáltatás, amely kiemelten fontos. Ez biztosítja, hogy az alkalmazások maximális sebességgel és hatékonysággal tudják lekérdezni és írni az adatokat.

Adatbázis-adminisztrátorként megszállottnak kell lennünk az adatbázis teljesítményének javítására szolgáló eszközök és módszerek iránt.

A PostgreSQL-ben hozzáférhetünk az EXPLAIN ANALYZE parancshoz, amely lehetővé teszi egy adott adatbázis-lekérdezés végrehajtási tervének és teljesítményének elemzését. A parancs részletes információt ad vissza arról, hogy az adatbázismotor hogyan dolgozza fel a lekérdezést. Ez magában foglalja a végrehajtott műveletek sorrendjét, a becsült lekérdezési költségeket, a végrehajtás időzítését és még sok mást.







Ezt az információt ezután felhasználhatjuk az adatbázis-lekérdezések azonosítására, valamint a lehetséges teljesítmény szűk keresztmetszetek azonosítására és kijavítására.



Ez az oktatóanyag azt tárgyalja, hogyan használható az EXPLAIN ANALYZE parancs a PostgreSQL-ben a lekérdezés teljesítményének megtekintéséhez és optimalizálásához.



PostgreSQL EXPLAIN ANALYZE

A parancs elég egyértelmű. Először is hozzá kell fűznünk az EXPLAIN ANALYZE parancsot az elemezni kívánt lekérdezés elejére.





A parancs szintaxisa a következő:

EXPLAIN ANALYZE

A parancs végrehajtása után a PostgreSQL részletes kimenetet ad vissza a megadott lekérdezésről.



Az EXPLAIN ANALYZE lekérdezés kimenet megértése

Mint már említettük, az EXPLAIN ANALYZE parancs futtatása után a PostgreSQL részletes jelentést készít a lekérdezési tervről és a végrehajtási statisztikákról.

A kimenet hasznos információkat tartalmazó oszlopokból áll. Az eredményül kapott oszlopok a képen láthatók, a megfelelő jelentésükkel:

KÉRDEZÉSI TERV – Ez az oszlop a megadott lekérdezés végrehajtási tervét jeleníti meg. A végrehajtási terv olyan műveletsorozatra vonatkozik, amelyet az adatbázis-motor hajt végre a lekérdezés sikeres befejezése érdekében.

TERV – A második oszlop a TERV oszlop. Ez tartalmazza a végrehajtási terv minden egyes műveletének vagy lépésének szöveges megjelenítését. Ismét minden művelet behúzással jelzi a műveletek hierarchiáját.

ÖSSZKÖLTSÉGE – A teljes költség oszlop a lekérdezés becsült összköltségét mutatja. A költség egy relatív mértékre vonatkozik, amelyet az adatbázis-lekérdezéstervező az optimális végrehajtási terv meghatározásához használ.

AKTUÁLIS SOROK – Ez az oszlop a lekérdezés végrehajtásának egyes lépéseiben feldolgozott sorok pontos számát mutatja.

TÉNYLEGES IDŐ – Ez az oszlop az egyes műveletek tényleges idejét mutatja, amely magában foglalja a művelet végrehajtási idejét és az erőforrásokra fordított időt is.

TERVEZÉSI IDŐ – Ez az oszlop azt az időt mutatja, amely alatt a lekérdezéstervező elkészíti a végrehajtási tervet. Ez magában foglalja a lekérdezés optimalizálásának és a terv generálásának teljes idejét.

VÉGREHAJTÁSI IDŐ – Ez az oszlop a lekérdezés végrehajtásának teljes idejét mutatja. Ez magában foglalja a tervezésre és a lekérdezések végrehajtására fordított időt is.

PostgreSQL EXPLAIN ANALYZE Példa

Nézzünk néhány alapvető példát az EXPLAIN ANALYZE utasítás használatára.

1. példa: Válassza a Nyilatkozat lehetőséget
Használjuk az EXPLAIN ANALYZE utasítást egy egyszerű select utasítás végrehajtásának bemutatására a PostgreSQL-ben.

EXPLAIN ANALYZE válassza ki a * értéket a wp_users listából, ahol az id > 3;

Az előző utasítás futtatása után a következő kimenetet kell kapnunk:

KÉRDEZÉSI TERV
-------------------------------------------------- ------------------
Seq Scan on wp_users  (költség=0,00..10,38 sor=10 szélesség=2256) (tényleges idő=0,009...0,010 sor=7 hurok=1)
Szűrő: (azonosító > 3)
A szűrő által eltávolított sorok: 3
Tervezési idő: 0,995 ms
Végrehajtási idő: 0,021 ms
(5 sor)

Ebben az esetben láthatjuk, hogy a Lekérdezési terv szakasz azt jelzi, hogy a lekérdezés szekvenciális vizsgálatot hajt végre a wp_users táblán. A szűrővonal azt a feltételt jelöli, amely a kapott sorok szűrésére szolgál.

Ezután megjelenik a „Szűrő által eltávolított sorok”, amely megmutatja a szűrőfeltétel által eltávolított sorok számát.

Végül a végrehajtási idő a lekérdezés teljes végrehajtási idejét mutatja. Ebben az esetben a lekérdezés 0,021 ms-t vesz igénybe.

2. példa: Csatlakozás elemzése
Vegyünk egy összetettebb lekérdezést, amely SQL csatlakozást tartalmaz. Ehhez a Pagila mintaadatbázist használjuk. Demonstrációs célból letöltheti és telepítheti a mintaadatbázist a gépére.

Futtathatunk egy egyszerű csatlakozást az alábbiak szerint:

magyarázat elemzés SELECT f.titt, c.name
filmből f
JOIN film_category fc ON f.film_id = fc.film_id
CSATLAKOZÁS a c kategóriára ON fc.kategória_azonosítója = c.kategória_azonosítója;

Miután futtattuk az adott lekérdezést, a kimenetet a következőképpen kell látnunk:

Vizsgáljuk meg a következő lekérdezési tervet:

  1. Beágyazott hurok – Ez azt jelzi, hogy az összekapcsolás beágyazott hurok összekapcsolási stratégiát használ.
  2. Hash Join – Ez a művelet összekapcsolja a film_category-t és a filmtáblázatokat egy hash-illesztési algoritmus segítségével. Ennek a műveletnek a költsége 77,50, és a becslések szerint 1000 sor. Ennek a műveletnek a tényleges ideje azonban 0,254–0,439 ezredmásodperc, és 1000 sort kér le.
  3. Hash Cond – Ez azt jelzi, hogy az összekapcsolási feltétel hash összekapcsolást használ a filmtáblázat film_id és film_category oszlopainak egyeztetésére.
  4. Seq Scan on film_category – Ez a művelet szekvenciális beolvasást hajt végre a film_category táblán 16,00 költséggel és 1000 sorral. A művelet tényleges ideje 0,008 és 0,056 milliszekundum között van, és 1000 sort kér le.
  5. Sorozatos szkennelés filmre – A lekérdezés szekvenciális beolvasást hajt végre a filmtáblán a művelet eredményeként kapott becsült és tényleges költségekkel és sorokkal.
  6. Memoize – Ez a művelet gyorsítótárazza a film_category és a filmtáblázatok összekapcsolásának eredményeit későbbi felhasználás céljából.
  7. Gyorsítótár kulcs – Ez azt jelzi, hogy a memorizáláshoz használt gyorsítótár kulcs a film_category kategória_id oszlopán alapul.
  8. Gyorsítótár mód – Ez azt jelzi, hogy a lekérdezés a logikai gyorsítótár módot használja.
  9. Találatok, kihagyások, kilakoltatások, túlcsordulások – A három sor statisztikai adatokat közöl a gyorsítótárról, a találatok számáról, a kihagyásokról, a kilakoltatásokról és a végrehajtás során bekövetkezett túlcsordulásokról. Ez a blokk tartalmazza a memóriahasználatot is a lekérdezés végrehajtása során.
  10. Indexvizsgálat a category_pkey használatával – Ez a művelet azt a műveletet mutatja, amely az elsődleges kulcsindex használatával indexvizsgálatot hajt végre a kategóriatáblázaton.
  11. Indexfeltétel – Ez azt mutatja, hogy az indexvizsgálat azon a feltételen alapul, amely megfelel a kategóriatáblázat kategóriaazonosítója oszlopának.
  12. Tervezési idő – Ez a sor a lekérdezés tervezéséhez szükséges időt mutatja, ami 3,005 ezredmásodperc.
  13. Végrehajtási idő – Végül ez a sor a lekérdezés teljes végrehajtási idejét mutatja, ami 0,745 ezredmásodperc.

Tessék, itt van! Részletes információ egy egyszerű csatlakozás végrehajtásáról a PostgreSQL-ben.

Következtetés

Felfedezte az EXPLAIN ANALYZE utasítás erejét és használatát a PostgreSQL-ben. Az EXPLAIN ANALYZE utasítás hatékony eszköz a lekérdezések elemzéséhez és optimalizálásához. Ezzel az eszközzel hatékony és kevésbé erőforrás-igényes lekérdezéseket hozhat létre.