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


sys.sp_query_store_set_hints (Transact-SQL)

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

Egy adott query_id lekérdezéstár-tippeket hoz létre vagy frissít.

Transact-SQL szintaxis konvenciói

Syntax

sp_query_store_set_hints
    [ @query_id = ] query_id ,
    [ @query_hints = ] 'query_hints'
    [ , [ @replica_group_id = ] 'replica_group_id' ]
[ ; ]

Arguments

Important

A kiterjesztett tárolt eljárások argumentumait a Szintaxis szakaszban leírt sorrendben kell megadni. Ha a paraméterek sorrenden kívül vannak beírva, hibaüzenet jelenik meg.

[ @query_id = ] query_id

A Lekérdezéstár query_id oszlop sys.query_store_query.

@query_id.

[ @query_hints = ] N'query_hints'

A lekérdezési lehetőségek karaktersztringje OPTION. @query_hintsnvarchar(max).

Ha USE HINT szerepel az @query_hints argumentumban, meg kell ismételni az egyes emlékeztetők neve körüli idézőjeleket. Például: @query_hints = N'OPTION (MAXDOP = 1, USE HINTS (''ENABLE_QUERY_OPTIMIZER_HOTFIXES'',''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))'.

További információ: Támogatott lekérdezési tippek.

[ @replica_group_id = ] 'replica_group_id'

Ez az opcionális paraméter határozza meg, hogy a rendszer milyen hatókörre alkalmazza a tippet egy másodlagos replikán, amikor engedélyezve van az olvasható másodpéldányok lekérdezéstára . @replica_group_idnagy. A Query Store másodlagos replikákhoz az SQL Server 2025 (17.x) és későbbi verzióitól kezdve támogatott, valamint az Azure SQL Database-ben. A teljes platformtámogatásért lásd a Query Store-t a másodlagos replikákért.

A @replica_group_id argumentum alapértelmezés szerint a helyi replika (elsődleges vagy másodlagos), de megadhat egy értéket a replica_group_id oszlopában egy másik replikacsoportra vonatkozó tipp beállításához.

Visszaadott érték

0 (sikeres) vagy 1 (hiba).

Remarks

A tippek érvényes T-SQL-sztringformátumban vannak megadva N'OPTION (..)'.

  • Ha egy adott @query_idnem tartalmaz lekérdezéstár-tippet, a rendszer új lekérdezéstár-tippet hoz létre.
  • Ha egy lekérdezéstár-tipp már létezik egy adott @query_id, a @query_hints megadott érték felülírja a társított lekérdezéshez korábban megadott tippeket.
  • Ha egy query_id nem létezik, hibaüzenet jelenik meg.

Abban az esetben, ha az egyik tipp megakadályozná a lekérdezéstervek készítését, a rendszer figyelmen kívül hagyja az összes tippet. A hiba részleteiről további információt a sys.query_store_query_hints.

A query_idtársított tippek eltávolításához használja a rendszer által tárolt eljárást sys.sp_query_store_clear_hints.

Támogatott lekérdezési tippek

Az alábbi lekérdezési tippek támogatják a Lekérdezéstár-tippeket:

{ HASH | ORDER } GROUP
  | { CONCAT | HASH | MERGE } UNION
  | { LOOP | MERGE | HASH } JOIN
  | EXPAND VIEWS
  | FAST number_rows
  | FORCE ORDER
  | IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
  | KEEP PLAN
  | KEEPFIXED PLAN
  | MAX_GRANT_PERCENT = percent
  | MIN_GRANT_PERCENT = percent
  | MAXDOP number_of_processors
  | NO_PERFORMANCE_SPOOL
  | OPTIMIZE FOR UNKNOWN
  | PARAMETERIZATION { SIMPLE | FORCED }
  | RECOMPILE
  | ROBUST PLAN
  | USE HINT ( '<hint_name>' [ , ...n ] )

A következő lekérdezési tippek jelenleg nem támogatottak:

  • OPTIMIZE FOR ( @var = val)
  • MAXRECURSION
  • USE PLAN (ehelyett fontolja meg a Query Store eredeti tervének kényszerítési képességét, sp_query_store_force_plan).
  • DISABLE_DEFERRED_COMPILATION_TV
  • DISABLE_TSQL_SCALAR_UDF_INLINING
  • Táblázatos tippek (például, FORCESEEK, READUNCOMMITTED) INDEX

Permissions

Az adatbázishoz ALTER engedély szükséges.

Examples

Lekérdezés azonosítása a Lekérdezéstárban

Az alábbi példa lekérdezi sys.query_store_query_text és sys.query_store_query a végrehajtott lekérdezés szövegtöredékének query_id visszaadásához.

Ebben a példában a hangolni kívánt lekérdezés a SalesLT mintaadatbázisban található:

SELECT *
FROM SalesLT.Address AS A
     INNER JOIN SalesLT.CustomerAddress AS CA
         ON A.AddressID = CA.AddressID
WHERE PostalCode = '98052'
ORDER BY A.ModifiedDate DESC;

A Lekérdezéstár nem tükrözi azonnal a rendszernézetek lekérdezési adatait.

A lekérdezés azonosítása a Lekérdezéstár rendszerkatalógus-nézeteiben:

SELECT q.query_id,
       qt.query_sql_text
FROM sys.query_store_query_text AS qt
     INNER JOIN sys.query_store_query AS q
         ON qt.query_text_id = q.query_text_id
WHERE query_sql_text LIKE N'%PostalCode =%'
      AND query_sql_text NOT LIKE N'%query_store%';
GO

Az alábbi mintákban a SalesLT adatbázis előző lekérdezési példáját query_id 39-ként azonosítottuk.

Egyetlen tipp alkalmazása

Az alábbi példa a RECOMPILE lekérdezéstárban azonosított query_id 39-query_id alkalmazza a tippet:

EXECUTE sys.sp_query_store_set_hints
    @query_id = 39,
    @query_hints = N'OPTION(RECOMPILE)';

Az alábbi példa a lekérdezéstárban azonosított query_id 39-örökölt számosságbecslő kényszerítésére alkalmazza a tippet:

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

Több tipp alkalmazása

Az alábbi példa több lekérdezési tippet alkalmaz a 39-es query_id, beleértve RECOMPILEMAXDOP 1a 110-es kompatibilitási szinten a lekérdezésoptimalizáló viselkedését:

EXECUTE sys.sp_query_store_set_hints
    @query_id = 39,
    @query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';

Lekérdezéstár-tippek megtekintése

Az alábbi példa a meglévő lekérdezéstár-tippeket adja vissza:

SELECT query_hint_id,
       query_id,
       replica_group_id,
       query_hint_text,
       last_query_hint_failure_reason,
       last_query_hint_failure_reason_desc,
       query_hint_failure_count,
       source,
       source_desc
FROM sys.query_store_query_hints
WHERE query_id = 39;

A tipp eltávolítása egy lekérdezésből

Az alábbi példában eltávolíthatja a query_id 39-ből a sp_query_store_clear_hints rendszer által tárolt eljárást.

EXECUTE sys.sp_query_store_clear_hints @query_id = 39;