Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2022 (16.x) a novější verze
databáze SQL Azure SQL Database
Azure SQL Managed Instance
v Microsoft Fabric
Vytvoří nebo aktualizuje nápovědy úložiště dotazů pro danou query_id.
Syntax
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @replica_group_id = ] 'replica_group_id' ]
[ ; ]
Arguments
Important
Argumenty rozšířených uložených procedur musí být zadány v určitém pořadí, jak je popsáno v části Syntaxe. Pokud jsou parametry zadány mimo pořadí, dojde k chybové zprávě.
[ @query_id = ] query_id
Sloupec úložiště dotazů query_id ze sys.query_store_query.
@query_id je bigint.
[ @query_hints = ] N'query_hints'
Znakový řetězec možností dotazu začínající OPTION.
@query_hints je nvarchar(max).
Pokud USE HINT je součástí argumentu @query_hints , musí se opakovat jednoduché uvozovky kolem názvů jednotlivých tipů. Například: @query_hints = N'OPTION (MAXDOP = 1, USE HINTS (''ENABLE_QUERY_OPTIMIZER_HOTFIXES'',''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))'.
Další informace naleznete v tématu Podporované nápovědy k dotazům.
[ @replica_group_id = ] 'replica_group_id'
Tento volitelný parametr určuje obor, při kterém se nápověda použije na sekundární replice, pokud je povolené úložiště dotazů pro čitelné sekundy . @replica_group_id je velký. Úložiště dotazů pro sekundární repliky je podporováno od SQL Server 2025 (17.x) a novějších verzí, stejně jako v Azure SQL Database. Pro kompletní podporu platformy viz Query Store pro sekundární repliky.
Argument @replica_group_id výchozí hodnotu místní repliky (primární nebo sekundární), ale volitelně můžete zadat hodnotu odpovídající hodnotě ve replica_group_id sloupci v sys.query_store_replicas a nastavit nápovědu pro jinou skupinu replik.
Návratová hodnota
0 (úspěch) nebo 1 (selhání).
Remarks
Nápovědy jsou zadány v platném formátu řetězce T-SQL N'OPTION (..)'.
- Pokud pro konkrétní @query_idneexistují žádné rady úložiště dotazů, vytvoří se nový tip úložiště dotazů.
- Pokud již nápovědu úložiště dotazů pro konkrétní @query_id existuje, hodnota zadaná pro @query_hints nahradí dříve zadané rady pro přidružený dotaz.
- Pokud query_id neexistuje, vyvolá se chyba.
V případě, že by jeden z tipů zabránil vytvoření plánu dotazu, budou všechny rady ignorovány. Další informace o podrobnostech o selhání najdete v tématu sys.query_store_query_hints.
Chcete-li odebrat nápovědy spojené s query_id, použijte systém uloženou proceduru sys.sp_query_store_clear_hints.
Podporované nápovědy k dotazům
Tyto nápovědy k dotazům jsou podporované jako rady úložiště dotazů:
{ 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 ] )
V současné době nejsou podporovány následující nápovědy k dotazům:
OPTIMIZE FOR ( @var = val)MAXRECURSION-
USE PLAN(místo toho zvažte možnost vynucení původního plánu úložiště dotazů sp_query_store_force_plan). DISABLE_DEFERRED_COMPILATION_TVDISABLE_TSQL_SCALAR_UDF_INLINING-
Rady k tabulce (například
FORCESEEK,READUNCOMMITTED,INDEX)
Permissions
Vyžaduje oprávnění ALTER k databázi.
Examples
Identifikace dotazu v úložišti dotazů
Následující příklad dotazů sys.query_store_query_text a sys.query_store_query k vrácení query_id pro fragment textu spuštěného dotazu.
V tomto příkladu je dotaz, který se pokoušíme vyladit, v ukázkové databázi SalesLT:
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;
Úložiště dotazů okamžitě neodráží data dotazů do systémových zobrazení.
Identifikujte dotaz v zobrazeních systémového katalogu úložiště dotazů:
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
V následujících ukázkách byl předchozí příklad dotazu v databázi SalesLT identifikován jako query_id 39.
Použití jediné nápovědy
Následující příklad použije nápovědu RECOMPILE pro query_id 39, jak je uvedeno v úložišti dotazů:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(RECOMPILE)';
Následující příklad použije nápovědu k vynucení staršího nástroje pro posouzení kardinality na query_id 39 identifikovaných v úložišti dotazů:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Použití více tipů
Následující příklad používá více tipů dotazu na query_id 39, včetně RECOMPILE, MAXDOP 1a chování optimalizátoru dotazů v úrovni kompatibility 110:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
Zobrazení nápovědy k úložišti dotazů
Následující příklad vrátí existující rady úložiště dotazů:
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;
Odebrání nápovědy z dotazu
Pomocí následujícího příkladu odeberte nápovědu z query_id 39 pomocí uložené procedury sp_query_store_clear_hints systému.
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;