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.

Vigyázat

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.

A Lekérdezéstár-tippek segítségével például a kód ismételt üzembe helyezése nélkül használhatja az ETL előnyeit. 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 keresi a Lekérdezéstár-tippek lekérdezésre való alkalmazásának szükségességét, 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 nem érhető el az Ön számára a szállítói specifikáció vagy a nagyobb tesztelési késések miatt, például. 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:

EXEC 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, ha a lekérdezések nem módosíthatók közvetlenül egy 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. A magasabb kompatibilitási szinten regresszált lekérdezések azonosításához használja a Lekérdezéstár regressziós lekérdezési jelentését, a Lekérdezéshangolási tanácsadó eszközt a migrálás során, vagy más, lekérdezésszintű alkalmazástelemetriai eszközöket. 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 későbbi végrehajtását, például a nem fontos lekérdezések magas erőforrás-felhasználást okoznak, és hatással vannak a kritikus alkalmazásterhelésekre.

Megjegyzés

A ABORT_QUERY_EXECUTION (előzetes verzió) lekérdezési tipp jelenleg csak az Azure SQL Database és az SQL Server 2025 (17.x) előzetes verziójában érhető el.

A 39 későbbi végrehajtásának query_id letiltásához például hajtsa végre a következő utasítást:

EXEC sys.sp_query_store_set_hints
     @query_id = 39,
     @query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';

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.
  • 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 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 egy lekérdezésnek a korábbi adatelosztásban, 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.