Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Az SQL Server 2022 (16.x) és újabb verziói
az Azure SQL Database
Azure SQL Managed Instance
SQL-adatbázist a Microsoft Fabricben
Ez a cikk a Lekérdezéstár tippekhasználatának ajánlott eljárásait ismerteti. A Lekérdezéstár-tippek lehetővé teszik a lekérdezésterv alakzatainak alakítását az alkalmazáskód módosítása nélkül.
- A lekérdezéstárral való konfigurálással és felügyelettel kapcsolatos további információkért lásd: Teljesítmény figyelése a Lekérdezéstár használatával.
- A végrehajtható információk felderítéséről és a lekérdezéstár teljesítményének finomhangolásáról további információt a Teljesítmény finomhangolása a Lekérdezéstárcímű témakörben talál.
- A lekérdezéstár általános ajánlott eljárásait a számítási feladatok Lekérdezéstárral való monitorozásának ajánlott eljárásai című témakörben találhatja meg.
A Lekérdezéstár tippek használati esetei
A lekérdezéstár tippjeinek ideálisnak tekintheti az alábbi használati eseteket. További információ: Mikor érdemes használni a Lekérdezéstár tippeket.
Caution
Mivel az SQL Server Lekérdezésoptimalizáló általában a legjobb végrehajtási tervet választja ki egy lekérdezéshez, javasoljuk, hogy csak tippeket használjon a tapasztalt fejlesztők és adatbázis-rendszergazdák számára. További információ: Lekérdezési tippek.
Ha a kód nem módosítható
A Lekérdezéstár-tippek segítségével az alkalmazáskód vagy adatbázis-objektumok módosítása nélkül befolyásolhatja a lekérdezések végrehajtási terveit. Egyetlen más funkció sem teszi lehetővé a lekérdezési tippek gyors és egyszerű alkalmazását.
Lekérdezéstár-tippeket használhat például a extract-transform-load (ETL) számítási feladatok előnyeinek kihasználásához kód ismételt üzembe helyezése nélkül. Ebből a 14 perces videóból megtudhatja, hogyan javíthatja a tömeges betöltést a Query Store-tippek segítségével:
A Lekérdezéstár-tippek egyszerű lekérdezéshangolási módszerek, de ha egy lekérdezés problémássá válik, lényegesebb kódmódosításokkal kell foglalkoznia. Ha rendszeresen úgy találja, hogy lekérdezéstár-tippeket kell alkalmaznia egy lekérdezésre, fontolja meg egy nagyobb lekérdezés újraírását. Az SQL Server Lekérdezésoptimalizáló általában a lekérdezések legjobb végrehajtási tervét választja ki. Azt javasoljuk, hogy csak tippeket használjon utolsó megoldásként tapasztalt fejlesztők és adatbázis-rendszergazdák számára.
További információ arról, hogy mely lekérdezési tippek alkalmazhatók: Támogatott lekérdezési tippek.
Nagy tranzakcióterhelés vagy kritikus fontosságú kód esetén
Ha a kódmódosítások a magas üzemidő-követelmények vagy a tranzakciós terhelés miatt nem praktikusak, a Lekérdezéstár-tippek gyorsan alkalmazhatnak lekérdezési tippeket a meglévő lekérdezési számítási feladatokra. A Lekérdezéstár tippek hozzáadása és eltávolítása egyszerű.
A Lekérdezéstár tippek hozzáadhatók és eltávolíthatók a lekérdezések csomagjaihoz, hogy a teljesítményt az ablakokban kiemelkedő terhelés esetén lehessen beállítani.
A terv útmutatóinak cseréjeként
A Lekérdezéstár tippjei előtt a fejlesztőknek a terv útmutatókra kellett támaszkodniuk, hogy hasonló feladatokat hajtsanak végre, amelyek használata összetett lehet. A lekérdezéstár-tippek integrálva vannak az SQL Server Management Studio (SSMS) Lekérdezéstár funkcióival a lekérdezések vizuális feltárásához.
Terv-útmutatók esetén az összes terv lekérdezési kódrészletek használatával történő keresésére van szükség. A Lekérdezéstár tippek funkció nem igényel pontos egyező lekérdezéseket az eredményként kapott lekérdezésterv befolyásolásához. A lekérdezéstár-tippek alkalmazhatók a lekérdezéstár adatkészlet query_id-ra.
A Lekérdezéstár-tippek felülírják a szigorúan kódolt utasításszintű tippeket és a meglévő tervbeli útmutatókat.
Fontolja meg az újabb kompatibilitási szintet
A Lekérdezéstár tippek hasznos módszer lehet, ha egy újabb adatbáziskompatibilitási szint például a szállítói specifikáció vagy a nagyobb tesztelési késések miatt nem érhető el. Ha magasabb kompatibilitási szint érhető el egy adatbázis számára, érdemes lehet frissíteni az egyes lekérdezések adatbáziskompatibilitási szintjét, hogy kihasználhassa az SQL Server legújabb teljesítményoptimalizálásait és funkcióit.
Ha például egy 140-es kompatibilitási szintű adatbázissal rendelkező SQL Server 2022 -es (16.x)-példánysal rendelkezik, akkor is használhat lekérdezéstár-tippeket az egyes lekérdezések futtatásához a 160-es kompatibilitási szinten. A következő tippet használhatja:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
A teljes oktatóanyagért tekintse meg a Lekérdezéstár példákat .
Fontolja meg egy régebbi kompatibilitási szintet a frissítés után
Egy másik eset, amikor a Lekérdezéstár tippjei segíthetnek abban, hogy a lekérdezések nem módosíthatók közvetlenül az SQL Server-példány áttelepítése vagy frissítése után. A Lekérdezéstár-tippek segítségével korábbi kompatibilitási szintet alkalmazhat egy lekérdezésre, amíg át nem írható vagy más módon meg nem címezhető, hogy a legújabb kompatibilitási szinten megfelelően teljesítsen. Azonosítsa a visszalépett lekérdezéseket, amelyek magasabb kompatibilitási szinttel rendelkeznek a Lekérdezéstár visszalépett lekérdezési jelentésével, a Lekérdezéshangolási segéd eszköz használata során a migrálásnál, vagy más lekérdezésszintű alkalmazástelemetria használatával. A kompatibilitási szintek közötti különbségekről további információt a Kompatibilitási szintek közötti különbségekcímű cikkben talál.
Az új kompatibilitási szint teljesítménytesztelése és a Lekérdezéstár ilyen módon történő üzembe helyezése után frissítheti a teljes adatbázis kompatibilitási szintjét, miközben a fő problémás lekérdezéseket a korábbi kompatibilitási szinten tarthatja, kódmódosítások nélkül.
Problémás lekérdezések jövőbeli végrehajtásának letiltása
A lekérdezési tipp segítségével letilthatja az ABORT_QUERY_EXECUTION ismert problémás lekérdezések jövőbeli végrehajtását, például nem fontos lekérdezések, amelyek magas erőforrás-felhasználást okoznak, és befolyásolják a kritikus alkalmazásterheléseket.
Note
A ABORT_QUERY_EXECUTION lekérdezési tipp csak az Azure SQL Database-ben, az Azure SQL Managed InstanceAUTD-ben és az SQL Server 2025-ben (17.x) érhető el.
A 39-es parancs jövőbeli végrehajtásának letiltásához hajtsa végre a query_id parancsot az alábbi módon:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
Ugyanazon lekérdezés letiltásának feloldásához hajtsa végre a sys.sp_query_store_clear_hints:
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;
További információkért lásd a Lekérdezéstár tipppéldáit.
A következő szempontokat kell figyelembe venni:
Amikor megadja ezt a tippet egy lekérdezéshez, a lekérdezés végrehajtására tett kísérlet a 8778-16-os súlyosságú hibával meghiúsul, a lekérdezés végrehajtása megszakadt, mert a ABORT_QUERY_EXECUTION tipp meg lett adva.
A lekérdezés letiltásának feloldásához törölje a tippet úgy, hogy átadja az
query_idértéket a@query_idparaméternek a sys.sp_query_store_clear_hints tárolt eljárásban.- Ez a tárolt eljárás törli a lekérdezésre vonatkozó összes tippet. Ha meg szeretné őrizni a meglévő tippeket a lekérdezés blokkolásának feloldása során, használja a sys.sp_query_store_set_hints, eltávolítva a
ABORT_QUERY_EXECUTIONtippet, de tartsa meg az egyéb tippeket.
- Ez a tárolt eljárás törli a lekérdezésre vonatkozó összes tippet. Ha meg szeretné őrizni a meglévő tippeket a lekérdezés blokkolásának feloldása során, használja a sys.sp_query_store_set_hints, eltávolítva a
A rendszernézetek segítségével megkeresheti a lekérdezéstárban letiltott lekérdezéseket, ahogyan az alábbi példalekérdezésben is látható:
SELECT qsh.query_id, q.query_hash, qt.query_sql_text FROM sys.query_store_query_hints AS qsh INNER JOIN sys.query_store_query AS q ON qsh.query_id = q.query_id INNER JOIN sys.query_store_query_text AS qt ON q.query_text_id = qt.query_text_id WHERE UPPER(qsh.query_hint_text) LIKE '%ABORT[_]QUERY[_]EXECUTION%';Az
query_idérték lekéréséhez legalább egy lekérdezés-végrehajtást rögzíteni kell a Lekérdezéstárban. Ennek a végrehajtásnak nem kell sikeresnek lennie. Ez azt jelenti, hogy a lejárt vagy megszakított lekérdezések jövőbeni végrehajtása blokkolható.Ha az összes lekérdezést egy adott lekérdezéskivonattal kell blokkolnia vagy feloldania, érdemes lehet automatizálási szkriptet használnia. A dbo.sp_query_store_modify_hints_by_query_hash például egy minta tárolt eljárás, amely egy ciklusban meghívja a rendszer
sys.sp_query_store_set_hintsvagysys.sp_query_store_clear_hintstárolt eljárását, az összes, a lekérdezés kivonatához illeszkedőquery_idértékhez.Ha egy lekérdezés már lefut, amikor letiltja, a végrehajtás folytatódik. A KILL utasítással megszakíthatja a lekérdezést.
- Az elpusztult lekérdezések végrehajtása nem lesz rögzítve a Lekérdezéstárban. Ha a lekérdezés még nincs a Lekérdezéstárban, hagyja, hogy a lekérdezés befejeződjön, vagy várja meg az időtúllépést a
query_idlekéréséhez, amelyet letilthat.
- Az elpusztult lekérdezések végrehajtása nem lesz rögzítve a Lekérdezéstárban. Ha a lekérdezés még nincs a Lekérdezéstárban, hagyja, hogy a lekérdezés befejeződjön, vagy várja meg az időtúllépést a
Ha egy lekérdezést a
ABORT_QUERY_EXECUTIONtipp letilt, aexecution_typenézetben aexecution_type_descoszlop értéke 4, a oszlop értéke pedig kivétel.Mint minden Query Store tipp esetében, rendelkeznie kell az adatbázisra vonatkozó
ALTERengedéllyel aABORT_QUERY_EXECUTIONtipp beállításához és törléséhez.
A Lekérdezéstár tippeket ad a szempontokhoz
A lekérdezéstár-tippek üzembe helyezésekor vegye figyelembe az alábbi forgatókönyveket.
Adatterjesztési változások
A terv útmutatói, a lekérdezéstáron keresztüli kényszerített tervek és a Lekérdezéstár tippjei felülírják az optimalizáló döntéshozatalát. A Lekérdezéstár tippje hasznos lehet most, de a jövőben nem. Ha például egy lekérdezéstár-tipp segít a lekérdezésben a korábbi adatterjesztésben, akkor az kontraproduktív lehet, ha nagy léptékű DML-műveletek módosítják az adatokat. Egy új adatterjesztés miatt az optimalizáló jobb döntést hozhat, mint a tipp. Ez a helyzet a terv viselkedésének kényszerítésének leggyakoribb következménye.
A Lekérdezéstár tippstratégiáinak rendszeres újraértékelése
A meglévő Lekérdezéstár-tippek stratégiájának újraértékelése a következő esetekben:
- Az ismert nagy adateloszlási változások után.
- Amikor az adatbázis számára elérhető erőforrások megváltoznak. Ha például megváltozik az Azure SQL Database, a felügyelt SQL-példány vagy az SQL Server virtuális gép számítási mérete.
- Ahol a tervek véglegesítése hosszú távúvá vált. A lekérdezéstár tippjei a legjobban rövid távú javításokhoz használhatók.
- Váratlan teljesítményregressziók.
Széles körű hatáslehetőségek
A Lekérdezéstár-tippek a lekérdezés összes végrehajtását befolyásolják, függetlenül a paraméterkészlettől, a forrásalkalmazástól, a felhasználótól vagy az eredménykészlettől. Véletlen teljesítményregresszió esetén a sys.sp_query_store_set_hints-szel létrehozott lekérdezéstár-tippek egyszerűen eltávolíthatók a sys.sp_query_store_clear_hints használatával.
A lekérdezéstár-tippek éles környezetben való alkalmazása előtt gondosan töltse be a kritikus fontosságú vagy bizalmas rendszerek tesztmódosításait.
A kényszerített paraméterezés és a RECOMPILE tipp nem támogatott
A lekérdezési RECOMPILE tipp lekérdezéstár-tippekkel való alkalmazása nem támogatott, ha az adatbázis paraméterezése KÉNYSZERÍTETT értékre van állítva. További információ: Kényszerített paraméterezés használatának irányelvei.
A RECOMPILE tipp nem kompatibilis az adatbázis szintjén beállított kényszerített paraméterezéssel. Ha az adatbázis kényszerített paraméterezést használ, és a RECOMPILE tipp a Lekérdezéstárban egy lekérdezéshez beállított tippsztring része, az adatbázismotor figyelmen kívül hagyja a RECOMPILE tippet, és más tippeket alkalmaz, ha meg van adva. Emellett 2022 júliusától kezdve az Azure SQL Database-ben megjelenik egy figyelmeztetés (12461 hibakód), amely szerint a RECOMPILE tipp figyelmen kívül lett hagyva.
További információ arról, hogy mely lekérdezési tippek alkalmazhatók: Támogatott lekérdezési tippek.