Teljesítmény monitorozása a Lekérdezéstár használatával

A következőkre vonatkozik: Sql Server 2016 (13.x) és újabb verziók Azure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse Analytics (csak dedikált SQL-készlet)SQL-adatbázis a Microsoft Fabricben

A Lekérdezéstár funkció betekintést nyújt az SQL Server, az Azure SQL Database, a Fabric SQL Database, az Azure SQL Managed Instance és az Azure Synapse Analytics lekérdezéstervének kiválasztásába és teljesítményébe. A Lekérdezéstár leegyszerűsíti a teljesítmény hibaelhárítását azáltal, hogy segít gyorsan megtalálni a lekérdezésterv módosításai által okozott teljesítménybeli különbségeket. A Lekérdezéstár automatikusan rögzíti a lekérdezések, tervek és futásidejű statisztikák előzményeit, és megőrzi ezeket a felülvizsgálathoz. Időablakok szerint választja el az adatokat, így láthatja az adatbázis használati mintáit, és megértheti, hogy mikor történtek változások a lekérdezéstervben a kiszolgálón.

A Query Store a(z) ALTER DATABASE SET options beállítással konfigurálható.

Important

Ha a Query Store-t használja az SQL Server 2016-ban (13.x) a megfelelő időben végzett számítási feladatok elemzéséhez, tervezze meg, hogy a lehető leghamarabb telepítse a teljesítményskálázhatósági javításokat a KB 4340759 .

A lekérdezéstár engedélyezése

  • A Lekérdezéstár alapértelmezés szerint engedélyezve van az új Azure SQL Database és az Azure SQL Managed Instance-adatbázisok esetében.
  • A Lekérdezéstár alapértelmezés szerint nincs engedélyezve az SQL Server 2016 (13.x), az SQL Server 2017 (14.x), az SQL Server 2019 (15.x) esetében. Alapértelmezés szerint engedélyezve van az READ_WRITE SQL Server 2022-től (16.x) kezdődő új adatbázisok módban. A teljesítményelőzmények jobb nyomon követéséhez, a lekérdezéstervekkel kapcsolatos problémák elhárításához és az SQL Server 2022 új képességeinek engedélyezéséhez (16.x) javasoljuk, hogy engedélyezze a Lekérdezéstárat minden adatbázisban.
  • A Lekérdezéstár alapértelmezés szerint nincs engedélyezve az új Azure Synapse Analytics-adatbázisokhoz.

A Lekérdezéstár lap használata az SQL Server Management Studióban

  1. Az Object Explorerben kattintson a jobb gombbal egy adatbázisra, majd válassza a Tulajdonságoklehetőséget.

    Note

    A Management Studio legalább 16-os verzióját igényli.

  2. Az Adatbázis tulajdonságai párbeszédpanelen válassza a Lekérdezéstár lapot.

  3. A Üzemmód (Kért) mezőben válassza ki a Olvasás íráslehetőséget.

Használja a(z) Transact-SQL utasításokat

A ALTER DATABASE utasítással engedélyezheti a lekérdezéstárat egy adott adatbázishoz. Például:

ALTER DATABASE <database_name>
SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE);

A Fabric SQL-adatbázisban a "Query Store" ALTER DATABASE-konfigurálási lehetőségei jelenleg korlátozottak.

Az Azure Synapse Analyticsben engedélyezze a lekérdezéstárat további beállítások nélkül, például:

ALTER DATABASE <database_name>
SET QUERY_STORE = ON;

A Query Store kapcsolatos további szintaxisbeállításokért lásd ALTER DATABASE SET a beállításokat.

Note

A Query Store nem engedélyezhető a master vagy a tempdb adatbázisok esetében.

Important

A Lekérdezéstár engedélyezéséről és a számítási feladathoz való igazításáról a "A lekérdezéstárral kapcsolatos legjobb gyakorlatok" dokumentumban olvashat.

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

Az SQL Server adott lekérdezéseinek végrehajtási tervei általában számos különböző okból alakulnak ki, például a statisztikák változásai, sémamódosítások, indexek létrehozása/törlése stb. miatt. Az eljárásgyorsítótár (ahol a gyorsítótárazott lekérdezési tervek tárolódnak) csak a legújabb végrehajtási tervet tárolja. A tervek a memóriaterhelés miatt a tervgyorsítótárból is ki lesznek távolítva. Ennek eredményeképpen a végrehajtási terv módosításai által okozott lekérdezési teljesítményregressziók nem triviálisak és időigényesek lehetnek a feloldásukhoz.

Mivel a Lekérdezéstár lekérdezésenként több végrehajtási tervet is megtart, szabályzatokat kényszeríthet arra, hogy a lekérdezésfeldolgozó egy adott végrehajtási tervet használjon egy lekérdezéshez. Ezt terv-kényszerítésnek nevezzük. A Lekérdezéstárban való tervezés a Lekérdezésmutatók lekérdezési tipphez hasonló mechanizmussal érhető el, de nem igényel módosítást a felhasználói alkalmazásokban. A terv kényszerítése nagyon rövid idő alatt meg tudja oldani a tervmódosítás által okozott lekérdezési teljesítményregressziót.

Note

A Lekérdezéstár olyan DML-utasítások terveit tárolja, mint a SELECT, INSERT, UPDATE, DELETE, MERGEés BULK INSERT.

A Lekérdezéstár kialakításánál fogva nem gyűjt végrehajtási terveket az olyan DDL-utasításokhoz, mint a CREATE INDEX, stb. A Lekérdezéstár az alapul szolgáló DML-utasítások végrehajtási terveinek gyűjtésével összesítve gyűjti az erőforrás-felhasználást. A Lekérdezéstár például megjelenítheti az új index feltöltéséhez belsőleg végrehajtott SELECT és INSERT utasításokat.

A Lekérdezéstár alapértelmezés szerint nem gyűjt adatokat natívan lefordított tárolt eljárásokhoz. A sys.sp_xtp_control_query_exec_stats használatával engedélyezheti az adatgyűjtést natívan lefordított tárolt eljárásokhoz.

Várakozási statisztikák egy másik információforrás, amely segít a teljesítményproblémák elhárításában az adatbázismotorban. A várakozási statisztikák hosszú ideig csak példányszinten voltak elérhetők, ami megnehezítette a várakozások visszakövetését egy adott lekérdezésre. Az SQL Server 2017 -től (14.x) és az Azure SQL Database-től kezdve a Lekérdezéstár tartalmaz egy dimenziót, amely nyomon követi a várakozási statisztikákat. Az alábbi példa lehetővé teszi, hogy a lekérdezéstár várakozási statisztikákat gyűjtsön.

ALTER DATABASE <database_name>
SET QUERY_STORE = ON ( WAIT_STATS_CAPTURE_MODE = ON );

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

  • A terv teljesítményregressziójának gyors megkeresése és javítása az előző lekérdezési terv kényszerítésével. Javítsa ki azokat a lekérdezéseket, amelyeknek a teljesítményük romlott a végrehajtási terv változásai miatt a közelmúltban.
  • Határozza meg, hogy egy lekérdezés hányszor lett végrehajtva egy adott időablakban, és segítsen a DBA-nak a teljesítményerőforrás-problémák elhárításában.
  • Azonosítsa az elmúlt x órában a n lekérdezéseket végrehajtási idő, memóriahasználat stb. alapján.
  • Az adott lekérdezéshez tartozó lekérdezéstervek előzményeinek naplózása.
  • Elemezze egy adott adatbázis erőforrás-használati mintáit (CPU, I/O és Memória).
  • Azonosítsa az erőforrásokra várakozó leggyakoribb n lekérdezéseket.
  • Egy adott lekérdezés vagy terv várakozási jellegének megismerése.

A lekérdezéstár három tárolót tartalmaz:

  • egy tervtároló a végrehajtási terv adatainak megőrzéséhez.
  • egy futtatási statisztikák tároló a végrehajtási statisztikák adatainak megőrzése céljából.
  • a várakozási statisztikák tároló a várakozási statisztikák adatainak tartós megőrzésére.

A tervtárban egy lekérdezésre tárolható egyedi tervek számát a max_plans_per_query konfigurációs opció korlátozza. A teljesítmény növelése érdekében az információk aszinkron módon vannak megírva az áruházakba. A helyhasználat minimalizálása érdekében a futtatókörnyezet-statisztikában lévő futtatókörnyezet végrehajtási statisztikái rögzített időkeretben vannak összesítve. Az ezekben az üzletekben lévő információk a Lekérdezéstár katalógusnézeteinek lekérdezésével láthatók.

Az alábbi lekérdezés a lekérdezésekről, azok terveiről, fordítási idejéről és futásidejű statisztikáiról a Lekérdezéstárból ad vissza információkat.

SELECT Txt.query_text_id, Txt.query_sql_text, Pln.plan_id, Qry.*, RtSt.*
FROM sys.query_store_plan AS Pln
INNER JOIN sys.query_store_query AS Qry
    ON Pln.query_id = Qry.query_id
INNER JOIN sys.query_store_query_text AS Txt
    ON Qry.query_text_id = Txt.query_text_id
INNER JOIN sys.query_store_runtime_stats RtSt
ON Pln.plan_id = RtSt.plan_id;

Másodlagos replikák lekérdezési kiszolgálója

A következőkre vonatkozik: SQL Server 2025 (17.x), Azure SQL Database

A másodlagos replikák lekérdezéstára funkció ugyanazt a Lekérdezéstár funkciót teszi lehetővé a másodlagos replika-számítási feladatokon, amelyek az elsődleges replikákhoz érhetők el. Ha a másodlagos replikák lekérdezéstára engedélyezve van, a replikák elküldik a lekérdezés-végrehajtási adatokat, amelyeket általában a Lekérdezéstárban tárolnának vissza az elsődleges replikába. Az elsődleges replika ezután megőrzi az adatokat a saját lekérdezéstárában lévő lemezen. Lényegében egy lekérdezéstár van megosztva az elsődleges és az összes másodlagos replika között. A lekérdezéstár az elsődleges replikán található, és az összes replika adatait együtt tárolja.

További információkért lásd: Másodlagos replikák lekérdezési tárolója.

Használja a Regressed Queries funkciót

A Lekérdezéstár engedélyezése után frissítse az Objektumkezelő panel adatbázis-részét a Lekérdezéstár szakasz hozzáadásához.

Képernyőkép a Lekérdezéstár jelentési fájáról az SSMS Object Explorerben.

Note

Az Azure Synapse Analytics esetében a Lekérdezéstár nézetei Rendszernézetek alatt érhetők el az Objektumkezelő panel adatbázis-részén.

Válassza Regressed Queries lehetőséget a Regressed Queries panel megnyitásához az SQL Server Management Studióban. A regrediált lekérdezéseket tartalmazó panelen megtekintheti a lekérdezéseket és a végrehajtási terveket a Lekérdezéstárban. Használja a felső legördülő listákat különböző kritériumok alapján szűrve a lekérdezéseket: időtartam (ms) (alapértelmezett), CPU idő (ms), logikai olvasások (KB), logikai írások (KB), fizikai olvasások (KB), CLR idő (ms), DOP, memóriafogyasztás (KB), sorszám, használt naplómemória (KB), ideiglenes adatbázis memória (KB) és várakozási idő (ms).

Jelöljön ki egy tervet a grafikus lekérdezési terv megtekintéséhez. A gombok segítségével megtekintheti a forrás lekérdezést, kényszerítheti és kényszerítheti le a lekérdezéstervet, válthat a rács- és diagramformátumok között, összehasonlíthatja a kijelölt terveket (ha több van kiválasztva), és frissítheti a megjelenítést.

Képernyőkép az SQL Server Regressed Queries jelentésről az SSMS Object Explorerben.

A terv kényszerítéséhez válasszon ki egy lekérdezést és egy tervet, majd válassza a Terv kényszerítéselehetőséget. Csak azokat a terveket kényszerítheti ki, amelyeket a lekérdezésterv szolgáltatás mentett, és amelyek még mindig megvannak a lekérdezésterv gyorsítótárában.

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

Az SQL Server 2017 -től (14.x) és az Azure SQL Database-től kezdve a lekérdezésenkénti várakozási statisztikák idővel elérhetők a Lekérdezéstárban.

A Lekérdezéstárban a várakozási típusok a várakozási kategóriákba vannak kombinálva. A várakozási kategóriák várakozási típusokhoz való leképezése sys.query_store_wait_stats (Transact-SQL)érhető el.

Válassza Lekérdezési várakozási statisztikák lehetőséget a Lekérdezési várakozási statisztikák panel megnyitásához az SQL Server Management Studio 18.0-s vagy újabb verzióiban. A Lekérdezési várakozási statisztikák panel egy sávdiagramot jelenít meg, amely a lekérdezéstár felső várakozási kategóriáit tartalmazza. A felső legördülő listával a várakozási idő összesítési feltételét választhatja ki: avg, max, min, std dev és teljes (alapértelmezett).

Képernyőkép az SQL Server query wait statistics jelentéséről az SSMS Object Explorerben.

Válasszon ki egy várakozási kategóriát a sávon, és megjelenik a kijelölt várakozási kategória részletes nézete. Ez az új sávdiagram azokat a lekérdezéseket tartalmazza, amelyek hozzájárultak a várakozási kategóriához.

Képernyőkép az SQL Server Query Wait Statistics részletes nézetéről az SSMS Object Explorerben.

Használja a felül található legördülőlistát a lekérdezések szűrésére a kiválasztott várakozási kategória különböző várakozási kritériumai alapján: átlag, maximum, minimális, std fejlesztés és összesen (alapértelmezett). Jelöljön ki egy tervet a grafikus lekérdezési terv megtekintéséhez. A gombok segítségével megtekintheti a forrás lekérdezést, kényszerítheti és lekényszerítheti a lekérdezéstervet, és frissítheti a megjelenítést.

várakozási kategóriák különböző várakozási típusokat természetük szerint hasonló gyűjtőkbe kombinálnak. A különböző várakozási kategóriák eltérő nyomon követési elemzést igényelnek a probléma megoldásához, de az ugyanabból a kategóriából származó várakozási típusok nagyon hasonló hibaelhárítási élményhez vezetnek, és ha az érintett lekérdezést a várakozások fölé irányítja, az hiányzó darab lenne a legtöbb ilyen vizsgálat sikeres elvégzéséhez.

Íme néhány példa arra, hogyan kaphat további elemzéseket a számítási feladatokról a lekérdezéstár várakozási kategóriáinak bevezetése előtt és után:

Korábbi élmény Új élmény Action
Adatbázisonként magas a RESOURCE_SEMAPHORE várakozások száma. Nagy memória várakozás a Lekérdezéstárban adott lekérdezések esetén 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. Érdemes lehet MAX_GRANT_PERCENT lekérdezési tippet használni ezekhez a lekérdezésekhez vagy az érintett lekérdezésekhez.
Adatbázisonként magas LCK_M_X várakozások Magas zárolási várakozások adott lekérdezésekhez a Lekérdezéstárban 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 azokat a lekérdezéseket, amelyek ugyanazt az entitást módosítják, és amelyeket gyakran hajtanak végre és/vagy nagy időtartamúak. 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.
Adatbázisonkénti magas PAGEIOLATCH_SH várakozások Magas puffer IO várakozások a Lekérdezéstárban adott lekérdezések esetén Keresse meg azokat a lekérdezéseket, amelyeknél sok fizikai olvasás történik a Lekérdezéstárban. Ha ezek megfelelnek a magas IO várakozással járó lekérdezéseknek, érdemes lehet indexet létrehozni az alapul szolgáló entitáson, hogy a scan műveletek helyett seek műveleteket lehessen végezni, és ezáltal minimalizálni lehessen a lekérdezések IO többletterhelését.
Magas szintű SOS_SCHEDULER_YIELD várakozások adatbázisonként Magas cpu-várakozások a Lekérdezéstárban adott lekérdezések esetén Keresse meg a legtöbb processzort használó lekérdezést a Lekérdezéstárban. Ezek között azonosítsa azokat a lekérdezéseket, amelyek esetében a magas cpu-trend korrelál az érintett lekérdezésekre váró magas processzorhasználattal. Összpontosítson a lekérdezések optimalizálására – lehet egy tervregresszió, vagy egy hiányzó index.

Konfigurációs lehetőségek

Az Query Store paraméterek konfigurálásához elérhető beállításokért lásd ALTER DATABASE SET a beállításokat (Transact-SQL).

A lekérdezéstár aktuális beállításainak meghatározásához kérdezze le a sys.database_query_store_options nézetet. Az értékekkel kapcsolatos további információkért lásd: sys.database_query_store_options.

A konfigurációs beállítások Transact-SQL utasítások használatával történő beállításáról a Option Managementcímű témakörben talál példákat.

Note

Az Azure Synapse Analytics esetében a Lekérdezéstár más platformokhoz hasonlóan engedélyezhető, de a további konfigurációs beállítások nem támogatottak.

A Lekérdezéstár megtekintése és kezelése a Management Studióban vagy az alábbi nézetek és eljárások használatával.

Lekérdezéstár-függvények

A függvények segítenek a lekérdezéstárban végzett műveletekben.

Lekérdezéstár katalógusnézetei

A katalógusnézetek információkat tartalmaznak a lekérdezéstárról.

A Lekérdezéstár tárolt eljárásai

A tárolt eljárások konfigurálják a lekérdezéstárat.

sp_query_store_consistency_check (Transact-SQL)1

1 Szélsőséges esetekben a Lekérdezéstár belső hibák miatt HIBA állapotot adhat meg. Az SQL Server 2017-től kezdve (14.x) ha ez történik, a Lekérdezéstár az érintett adatbázisban tárolt sp_query_store_consistency_check művelet végrehajtásával állítható helyre. További részletekért lásd a sys.database_query_store_options a actual_state_desc oszlop leírásában.

Lekérdezéstár karbantartása

A lekérdezéstár karbantartására és kezelésére vonatkozó ajánlott eljárásokat és javaslatokat ebben a cikkben bővítettük: Ajánlott eljárások a lekérdezéstárkezeléséhez.

Teljesítményvizsgálat és hibaelhárítás

A Lekérdezéstár teljesítményhangolásának megismeréséhez további információért tekintse meg a Teljesítmény finomhangolása a Lekérdezéstárralcímű témakört.

Egyéb teljesítménytémakörök: