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


A Lekérdezéstár ajánlott eljárásai

A következőkre vonatkozik: Az SQL Server 2022 (16.x) és újabb verziói az Azure SQL DatabaseAzure SQL Managed InstanceSQL-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á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_id paramé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_EXECUTION tippet, de tartsa meg az egyéb tippeket.
  • 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_hints vagy sys.sp_query_store_clear_hints tá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_id lekéréséhez, amelyet letilthat.
  • Ha egy lekérdezést a ABORT_QUERY_EXECUTION tipp letilt, a execution_type nézetben a execution_type_desc oszlop értéke 4, a oszlop értéke pedig kivétel.

  • Mint minden Query Store tipp esetében, rendelkeznie kell az adatbázisra vonatkozó ALTER engedéllyel a ABORT_QUERY_EXECUTION tipp 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.