Megosztás a következőn keresztül:


A teljesítmény figyelése a Query Store segítségével

A következőkre vonatkozik: Azure Database for PostgreSQL – Rugalmas kiszolgáló

A rugalmas Azure Database for PostgreSQL-kiszolgáló Lekérdezéstár funkciója lehetővé teszi a lekérdezési teljesítmény időbeli nyomon követését. A Lekérdezéstár leegyszerűsíti a teljesítménybeli hibaelhárítást azáltal, hogy segít gyorsan megtalálni a leghosszabb ideig futó és a legtöbb erőforrás-igényes lekérdezést. A Lekérdezéstár automatikusan rögzíti a lekérdezések és a futtatókörnyezet statisztikáinak előzményeit, és megőrzi azokat a felülvizsgálathoz. Idő szerint szeleteli az adatokat, hogy láthassa az időbeli használati mintákat. Az összes felhasználó, adatbázis és lekérdezés adatait egy azure_sys nevű adatbázis tárolja a rugalmas Azure Database for PostgreSQL-kiszolgálópéldányban.

Fontos

Ne módosítsa a azure_sys adatbázist vagy annak sémáját. Ez megakadályozza, hogy a Lekérdezéstár és a kapcsolódó teljesítményfunkciók megfelelően működjön.

Lekérdezéstár engedélyezése

A Lekérdezéstár minden régióban elérhető, további díjak nélkül. Ez egy bejelentkezési funkció, ezért alapértelmezés szerint nincs engedélyezve egy kiszolgálón. A lekérdezéstár globálisan engedélyezhető vagy letiltható egy adott kiszolgálón lévő összes adatbázis esetében, és nem kapcsolható be vagy ki adatbázisonként.

Fontos

Ne engedélyezze a Lekérdezéstárat a burstable tarifacsomagon, mert az teljesítménybeli hatást okozna.

Lekérdezéstár engedélyezése az Azure Portalon

  1. Jelentkezzen be az Azure Portalra, és válassza ki a rugalmas Azure Database for PostgreSQL-kiszolgálópéldányt.
  2. Válassza ki a kiszolgálóparamétereket a menü Gépház szakaszában.
  3. Keresse meg a paramétert pg_qs.query_capture_mode .
  4. Állítsa be az értéket TOPALLvagy – attól függően, hogy nyomon szeretné követni a legfelső szintű lekérdezéseket vagy a beágyazott lekérdezéseket is (amelyek egy függvényben vagy eljárásban futnak), majd kattintson a Mentés gombra. Engedélyezze az első köteg adat 20 percig történő tárolását az azure_sys adatbázisban.

Lekérdezéstár várakozási mintavételezésének engedélyezése

  1. Keresse meg a paramétert pgms_wait_sampling.query_capture_mode .
  2. Állítsa be az értéket a mentésre és a mentésre.ALL

Információk a Lekérdezéstárban

A Lekérdezéstár két tárolóból áll:

  1. Futtatókörnyezeti statisztikák tárolója a lekérdezés-végrehajtási statisztikák adatainak megőrzéséhez.
  2. Várakozási statisztikák tárolója a várakozási statisztikák adatainak megőrzéséhez.

A Lekérdezéstár használatának gyakori forgatókönyvei a következők:

  • Annak meghatározása, hogy egy lekérdezés hány alkalommal lett végrehajtva egy adott időablakban.
  • A lekérdezések átlagos végrehajtási idejének összehasonlítása az időablakokban a nagy eltérések megtekintéséhez.
  • A leghosszabb ideig futó lekérdezések azonosítása az elmúlt néhány órában.
  • Az erőforrásokra várakozó leggyakoribb N-lekérdezések azonosítása.
  • Egy adott lekérdezés természetének megértése.

A helyhasználat minimalizálása érdekében a futtatókörnyezet-statisztikában lévő futtatókörnyezet végrehajtási statisztikái egy rögzített, konfigurálható időkereten vannak összesítve. Az ezekben az üzletekben található információk lekérdezhetők nézetek használatával.

Lekérdezéstár adatainak elérése

A lekérdezéstár adatai a rugalmas Azure Database for PostgreSQL-kiszolgálópéldány azure_sys adatbázisában lesznek tárolva. Az alábbi lekérdezés a Lekérdezéstárban lévő lekérdezésekkel kapcsolatos információkat adja vissza:

SELECT * FROM  query_store.qs_view;

Vagy a várakozási statisztikák lekérdezése:

SELECT * FROM  query_store.pgms_wait_sampling_view;

Várakozási lekérdezések keresése

A várakozási eseménytípusok a különböző várakozási eseményeket hasonlóság alapján egyesítik a gyűjtőkben. A Lekérdezéstár megadja a várakozási esemény típusát, az adott várakozási esemény nevét és a kérdéses lekérdezést. Ha képes korrelálni ezt a várakozási információt a lekérdezés futtatókörnyezeti statisztikáival, mélyebben megismerheti, hogy mi járul hozzá a lekérdezési teljesítmény jellemzőihez.

Íme néhány példa arra, hogyan nyerhet további betekintést a számítási feladatokba a lekérdezéstár várakozási statisztikáinak használatával:

Megfigyelés Művelet
Magas zárolási várakozások Ellenőrizze az érintett lekérdezések lekérdezési szövegeit, és azonosítsa a célentitásokat. Keresse meg a Lekérdezéstárban az azonos entitást módosító, gyakran és/vagy nagy időtartamú lekérdezéseket. A lekérdezések azonosítása után fontolja meg az alkalmazáslogika módosítását az egyidejűség javítása érdekében, vagy használjon kevésbé korlátozó elkülönítési szintet.
Magas puffer I/O-várakozások Keresse meg a lekérdezéseket nagy számú fizikai olvasással a Lekérdezéstárban. Ha magas I/O-várakozással egyeznek meg a lekérdezésekkel, érdemes lehet indexet létrehozni a mögöttes entitáson, hogy a vizsgálatok helyett keressen. Ez minimálisra csökkentené a lekérdezések I/O-terhelését. Ellenőrizze a kiszolgáló teljesítmény Javaslatok a portálon, hogy vannak-e olyan indexjavaslatok a kiszolgálóhoz, amelyek optimalizálnák a lekérdezéseket.
Magas memória várakozások Keresse meg a legtöbb memóriaigényű lekérdezést a Lekérdezéstárban. Ezek a lekérdezések valószínűleg késleltetik az érintett lekérdezések további előrehaladását. Ellenőrizze a kiszolgáló teljesítmény Javaslatok a portálon, hogy vannak-e olyan indexjavaslatok, amelyek optimalizálnák ezeket a lekérdezéseket.

Konfigurációs lehetőségek

Ha a Lekérdezéstár engedélyezve van, a kiszolgálóparaméter által meghatározott hosszúságú összesítő ablakokba menti az pg_qs.interval_length_minutes adatokat (alapértelmezés szerint 15 percig). Minden egyes ablakban az 500 különböző lekérdezést tárolja. A lekérdezéstár paramétereinek konfigurálásához az alábbi beállítások érhetők el:

Paraméter Leírás Alapértelmezett Tartomány
pg_qs.query_capture_mode Meghatározza, hogy mely utasítások legyenek nyomon követve. Nincs none, top, all
pg_qs.interval_length_minutes (*) Beállítja a query_store rögzítési időközt percekben pg_qs – ez az adatmegőrzés gyakorisága. 15 1 - 30
pg_qs.store_query_plans Be- vagy kikapcsolja a lekérdezéstervek mentését pg_qs. kikapcsolva be- és kikapcsolt
pg_qs.max_plan_size A pg_qs lekérdezésterv szövegéhez mentendő bájtok maximális számát adja meg; hosszabb tervek csonkolt lesznek. 7500 100 - 10k
pg_qs.max_query_text_length Beállítja a menthető lekérdezések maximális hosszát; hosszabb lekérdezések csonkulnak. 6000 100 – 10K
pg_qs.retention_period_in_days A pg_qs megőrzési időszakának beállítása napokra – ez után az adatok törlődnek. 7 1 - 30
pg_qs.track_utility Azt határozza meg, hogy a segédprogramparancsokat pg_qs követi-e. ekkor be- és kikapcsolt

(*) Statikus kiszolgálóparaméter, amely a kiszolgáló újraindítását igényli az érték módosításának érvénybe lépéséhez.

A következő beállítások kifejezetten a várakozási statisztikákra vonatkoznak:

Paraméter Leírás Alapértelmezett Tartomány
pgms_wait_sampling.query_capture_mode Kiválasztja, hogy a pgms_wait_sampling bővítmény mely utasításokat követi nyomon. Nincs nincs, minden
Pgms_wait_sampling.history_period Ezredmásodpercben adja meg a gyakoriságot, amelynél a várakozási események mintavételezése folyamatban van. 100 1-600000

Feljegyzés

pg_qs.query_capture_mode felülírja a pgms_wait_sampling.query_capture_mode módot. Ha pg_qs.query_capture_mode nincs, a pgms_wait_sampling.query_capture_mode beállításnak nincs hatása.

Az Azure Portal használatával lekérhet vagy beállíthat egy másik értéket egy paraméterhez.

Nézetek és függvények

A Lekérdezéstár megtekintése és kezelése az alábbi nézetek és függvények használatával. A PostgreSQL nyilvános szerepkörben bárki megtekintheti az adatokat a Lekérdezéstárban. Ezek a nézetek csak az azure_sys adatbázisban érhetők el.

A lekérdezések normalizálhatók úgy, hogy áttekintik a szerkezetüket, és figyelmen kívül hagynak minden nem szemantikailag jelentőset, például literálokat, állandókat, aliasokat vagy különbségeket a burkolatban.

Ha két lekérdezés szemantikailag azonos, még akkor is, ha ugyanazon hivatkozott oszlopokhoz és táblákhoz különböző aliasokat használnak, ugyanazzal a query_id azonosítja őket. Ha két lekérdezés csak a bennük használt literális értékekben különbözik, ugyanazzal a query_id is azonosítja őket. Az azonos query_id azonosított lekérdezések sql_query_text a Lekérdezéstár rögzítési tevékenységének megkezdése óta először végrehajtott lekérdezés sql_query_text lesznek, vagy az utolsó alkalommal, amikor a tárolt adatok elvetve lettek a query_store.qs_reset függvény végrehajtása miatt.

A lekérdezés normalizálásának működése

Az alábbiakban néhány példát mutatunk be a normalizálás működésének szemléltetésére:

Tegyük fel, hogy a következő utasítással hoz létre egy táblát:

create table tableOne (columnOne int, columnTwo int);

Engedélyezi a Lekérdezéstár adatgyűjtést, és egyetlen vagy több felhasználó hajtja végre a következő lekérdezéseket pontosan ebben a sorrendben:

select * from tableOne;
select columnOne, columnTwo from tableOne;
select columnOne as c1, columnTwo as c2 from tableOne as t1;
select columnOne as "column one", columnTwo as "column two" from tableOne as "table one";

Az összes korábbi lekérdezés azonos query_id. A Lekérdezéstár által megtartott szöveg pedig az adatgyűjtés engedélyezése után végrehajtott első lekérdezés szövege. Ezért az lenne select * from tableOne;.

A normalizálás után a következő lekérdezések nem egyeznek meg az előző lekérdezéskészlettel, mert a WHERE záradék szemantikailag eltérővé teszi őket:

select columnOne as c1, columnTwo as c2 from tableOne as t1 where columnOne = 1 and columnTwo = 1;
select * from tableOne where columnOne = -3 and columnTwo = -3;
select columnOne, columnTwo from tableOne where columnOne = '5' and columnTwo = '5';
select columnOne as "column one", columnTwo as "column two" from tableOne as "table one" where columnOne = 7 and columnTwo = 7;

Az utolsó készletben lévő lekérdezések azonban ugyanazt a query_id használják, és az azonosításukhoz használt szöveg a köteg select columnOne as c1, columnTwo as c2 from tableOne as t1 where columnOne = 1 and columnTwo = 1;első lekérdezésének szövege.

Végül talál néhány olyan lekérdezést, amely nem felel meg az előző köteg query_id, és hogy miért nem:

Lekérdezés:

select columnTwo as c2, columnOne as c1 from tableOne as t1 where columnOne = 1 and columnTwo = 1;

A nem egyezés oka: Az oszlopok listája ugyanarra a két oszlopra (columnOne és ColumnTwo) hivatkozik, de a hivatkozott sorrend fordított, az előző kötegből columnOne, ColumnTwoColumnTwo, columnOne a lekérdezésbe.

Lekérdezés:

select * from tableOne where columnTwo = 25 and columnOne = 25;

Az egyeztetés sikertelenségének oka: A WHERE záradékban kiértékelt kifejezések hivatkozási sorrendje az előző kötegből columnOne = ? and ColumnTwo = ?ColumnTwo = ? and columnOne = ? a lekérdezésbe kerül.

Lekérdezés:

select abs(columnOne), columnTwo from tableOne where columnOne = 12 and columnTwo = 21;

A nem egyezés oka: Az oszloplistában az első kifejezés már nem columnOne , hanem a függvény abs kiértékelése columnOne (abs(columnOne)), amely nem szemantikailag egyenértékű.

Lekérdezés:

select columnOne as "column one", columnTwo as "column two" from tableOne as "table one" where columnOne = ceiling(16) and columnTwo = 16;

A nem egyezés oka: A WHERE záradék első kifejezése columnOne már nem a literális egyenlőséget értékeli ki, hanem egy konstanson kiértékelt függvény ceiling eredményével, amely nem szemantikailag egyenértékű.

Nézetek

query_store.qs_view

Ez a nézet a Lekérdezéstár segédtábláiban már meglévő összes adatot visszaadja. Az aktuális aktív időablakban a memóriában rögzített adatok nem láthatók, amíg az időablak véget nem ér, és a rendszer összegyűjti és megőrzi a memóriában tárolt adatokat a lemezen tárolt táblákban. Ez a nézet minden különálló adatbázishoz (db_id), felhasználóhoz (user_id) és lekérdezéshez (query_id) eltérő sort ad vissza.

Név Típus Hivatkozások Leírás
runtime_stats_entry_id bigint Azonosító a runtime_stats_entries táblából.
user_id Oid pg_authid.oid Az utasítást végrehajtó felhasználó objektumazonosítója.
db_id Oid pg_database.oid Annak az adatbázisnak az objektumazonosítója, amelyben az utasítást végrehajtották.
query_id bigint Az utasítás elemzési fájából kiszámított belső kivonatkód.
query_sql_text varchar(10000) Egy reprezentatív nyilatkozat szövege. Az azonos struktúrájú különböző lekérdezések csoportosítva vannak; ez a szöveg a fürt első lekérdezésének szövege. A lekérdezési szöveg maximális hosszának alapértelmezett értéke 6000, és a lekérdezéstár paraméterrel pg_qs.max_query_text_lengthmódosítható. Ha a lekérdezés szövege meghaladja ezt a maximális értéket, a rendszer az első pg_qs.max_query_text_length karakterekre csonkolja.
plan_id bigint A lekérdezésnek megfelelő terv azonosítója.
start_time időbélyeg A lekérdezéseket időablakok összesítik, amelyek időtartamát a kiszolgálóparaméter pg_qs.interval_length_minutes határozza meg (az alapértelmezett érték 15 perc). Ez a bejegyzéshez tartozó időablaknak megfelelő kezdési idő.
end_time időbélyeg A bejegyzés időablakának megfelelő befejezési idő.
Hívások bigint A lekérdezés végrehajtásának száma ebben az időablakban. Figyelje meg, hogy a párhuzamos lekérdezések esetében az egyes végrehajtások hívásainak száma 1-nek felel meg a lekérdezés végrehajtását végrehajtó háttérfolyamat esetében, valamint az egyes háttérmunkafolyamatok további egységeinek száma, amelyek a végrehajtási fa párhuzamos ágainak végrehajtásával való együttműködésre indítanak.
total_time dupla pontosság Lekérdezések teljes végrehajtási ideje ezredmásodpercben.
min_time dupla pontosság A lekérdezések minimális végrehajtási ideje ezredmásodpercben.
max_time dupla pontosság A lekérdezés végrehajtásának maximális időtartama ezredmásodpercben.
mean_time dupla pontosság A lekérdezések átlagos végrehajtási ideje ezredmásodpercben.
stddev_time dupla pontosság A lekérdezés végrehajtási idejének szórása ezredmásodpercben.
megtartása v bigint Az utasítás által lekért vagy érintett sorok teljes száma. Figyelje meg, hogy a párhuzamos lekérdezések esetében az egyes végrehajtások sorainak száma megegyezik a lekérdezés végrehajtását végrehajtó háttérfolyamat által az ügyfélnek visszaadott sorok számával, valamint az összes sor összegével, amelyet az egyes háttérmunkafolyamatok a végrehajtási fa párhuzamos ágainak végrehajtásával való együttműködésre indítottak el, visszatérnek a háttérrendszer folyamatához.
shared_blks_hit bigint Az utasítás által a megosztott blokkgyorsítótár-találatok teljes száma.
shared_blks_read bigint Az utasítás által beolvasott megosztott blokkok teljes száma.
shared_blks_dirtied bigint Az utasítás által koszosított megosztott blokkok teljes száma.
shared_blks_written bigint Az utasítás által írt megosztott blokkok teljes száma.
local_blks_hit bigint A helyi blokkgyorsítótár-találatok teljes száma az utasítás szerint.
local_blks_read bigint Az utasítás által beolvasott helyi blokkok teljes száma.
local_blks_dirtied bigint Az utasítás által szennyezett helyi blokkok teljes száma.
local_blks_written bigint Az utasítás által írt helyi blokkok teljes száma.
temp_blks_read bigint Az utasítás által beolvasott ideiglenes blokkok teljes száma.
temp_blks_written bigint Az utasítás által írt ideiglenes blokkok teljes száma.
blk_read_time dupla pontosság Az utasítás olvasási blokkokkal töltött teljes ideje ezredmásodpercben (ha track_io_timing engedélyezve van, egyébként nulla).
blk_write_time dupla pontosság Az utasítás blokkok írásával töltött teljes ideje ezredmásodpercben (ha track_io_timing engedélyezve van, egyébként nulla).
is_system_query Logikai Meghatározza, hogy a lekérdezést szerepkörrel hajtották-e végre user_id = 10 (azuresu), amely superuser jogosultságokkal rendelkezik, és a vezérlőpanel műveleteinek végrehajtására szolgál. Mivel ez a szolgáltatás egy felügyelt PaaS-szolgáltatás, csak a Microsoft része ennek a felügyelői szerepkörnek.
query_type text A lekérdezés által képviselt művelet típusa. A lehetséges értékek a következőkunknown: , select, update, deleteinsert, merge, utility, nothingundefined.

query_store.query_texts_view

Ez a nézet lekérdezési szöveges adatokat ad vissza a Lekérdezéstárban. Minden különálló query_sql_text egy sor van.

Név Típus Leírás
query_text_id bigint A query_texts tábla azonosítója
query_sql_text varchar(10000) Egy reprezentatív nyilatkozat szövege. Az azonos struktúrájú különböző lekérdezések csoportosítva vannak; ez a szöveg a fürt első lekérdezésének szövege.
query_type smallint A lekérdezés által képviselt művelet típusa. A PostgreSQL <= 14 verziójában a lehetséges értékek 0 (ismeretlenek), 1 (kiválasztás), 2 (frissítés), 3 (beszúrás), 4 (törlés), 5 (segédprogram), 6 (semmi). A PostgreSQL >= 15 verziójában a lehetséges értékek 0 (ismeretlenek), 1 (kiválasztás), 2 (frissítés), 3 (beszúrás), 4 (törlés), 5 (egyesítés), 6 (segédprogram), 7 (semmi).

query_store.pgms_wait_sampling_view

Ez a nézet várakozási események adatait adja vissza a Lekérdezéstárban. Ez a nézet egy másik sort ad vissza minden különálló adatbázishoz (db_id), felhasználóhoz (user_id), lekérdezéshez (query_id) és eseményhez (eseményhez).

Név Típus Hivatkozások Leírás
start_time időbélyeg A lekérdezéseket időablakok összesítik, amelyek időtartamát a kiszolgálóparaméter pg_qs.interval_length_minutes határozza meg (az alapértelmezett érték 15 perc). Ez a bejegyzéshez tartozó időablaknak megfelelő kezdési idő.
end_time időbélyeg A bejegyzés időablakának megfelelő befejezési idő.
user_id Oid pg_authid.oid Az utasítást végrehajtó felhasználó objektumazonosítója.
db_id Oid pg_database.oid Annak az adatbázisnak az objektumazonosítója, amelyben az utasítást végrehajtották.
query_id bigint Az utasítás elemzési fájából kiszámított belső kivonatkód.
event_type text Az az eseménytípus, amelyre a háttérrendszer várakozik.
esemény text A várakozási esemény neve, ha a háttérrendszer jelenleg várakozik.
Hívások egész szám Hányszor rögzítette ugyanazt az eseményt.

Feljegyzés

A query_store.pgms_wait_sampling_view nézet event_type és eseményoszlopainaklehetséges értékeinek listájáért tekintse meg a pg_stat_activity hivatalos dokumentációját, és keresse meg az azonos nevű oszlopokra hivatkozó információkat.

query_store.query_plans_view

Ez a nézet a lekérdezés végrehajtásához használt lekérdezéstervet adja vissza. Minden különálló adatbázis-azonosítóhoz és lekérdezésazonosítóhoz egy sor tartozik. Ez csak a nem használható lekérdezések lekérdezési terveit tárolja.

plan_id db_id query_id plan_text
plan_id bigint A EXPLAIN által létrehozott normalizált lekérdezési terv kivonatértéke. Normalizáltnak tekinthető, mert kizárja a tervcsomópontok becsült költségeit és a pufferek használatát.
db_id Oid pg_database.oid Annak az adatbázisnak az objektumazonosítója, amelyben az utasítást végrehajtották.
query_id bigint Az utasítás elemzési fájából kiszámított belső kivonatkód.
plan_text varchar(10000) A költség=false, buffers=false és format=text utasítás végrehajtási terve. Ez ugyanaz a kimenet, amelyet a EXPLAIN adott.

Functions

query_store.qs_reset

Ez a függvény elveti a Lekérdezéstár által eddig összegyűjtött összes statisztikát. Elveti a már bezárt időablakok statisztikáit, amelyek a lemeztáblákon megmaradtak, és az aktuális időablak statisztikáit is, amelyek továbbra is memóriában maradnak. Ezt a függvényt csak a kiszolgálói rendszergazdai szerepkör (azure_pg_admin) hajthatja végre.

query_store.staging_data_reset

Ez a függvény elveti a Lekérdezéstár által a memóriában összegyűjtött összes statisztikát (azaz a memóriában lévő adatokat, amelyeket még nem öblítettek ki a lemeztáblákra, támogatva a Lekérdezéstárhoz gyűjtött adatok megőrzését). Ezt a függvényt csak a kiszolgálói rendszergazdai szerepkör (azure_pg_admin) hajthatja végre.

Korlátozások és ismert problémák

Az Azure Storage és a Lekérdezéstár kompatibilitása

Kompatibilitási problémák miatt nem engedélyezheti egyszerre az Azure Storage- és a Query Store-bővítményeket. A megfelelő működés és a lehetséges ütközések elkerülése érdekében egyszerre csak egy bővítményt engedélyezzen.

Az Azure Storage használata:

  • Tiltsa le a Lekérdezéstárat a paraméter pg_qs.query_capture_modeNONEbeállításával. Ez a paraméter dinamikus, ezért nem kell újraindulnia.

A Lekérdezéstár használata:

  1. Tiltsa le az Azure Storage-bővítményt a kiadással DROP EXTENSION azure_storage;.
  2. Távolítsa el az Azure Storage-t a fájlból shared_preload_libraries.
  3. Indítsa újra az adatbázis-kiszolgálót.

Ezek a lépések az ütközések megelőzéséhez és a rendszer megfelelő működésének biztosításához szükségesek. Dolgozunk a kompatibilitási problémák megoldásán, és folyamatosan tájékoztatjuk a frissítésekről.

Írásvédett mód

Ha egy Rugalmas Azure Database for PostgreSQL-példány írásvédett módban van, például ha a default_transaction_read_only paraméter értéke on, vagy ha a csak olvasási mód automatikusan engedélyezve van a tárolási kapacitás elérése miatt, a Lekérdezéstár nem rögzít adatokat.