sys.sp_query_store_set_hints (Transact-SQL)
platí pro: SQL Server 2022 (16.x)
azure SQL Database
azure SQL Managed Instance
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'
[ , [ @query_hint_scope = ] 'replica_group_id' ]
[ ; ]
Argumenty
Důležité
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). Další informace najdete v tématu Podporované nápovědy k dotazům v tomto článku.
[ @query_hint_scope = ] 'replica_group_id'
Ve výchozím nastavení je obor nového úložiště dotazů pouze místní replika. @query_hint_scope je tinyint. Tento volitelný parametr určuje obor, při kterém bude tip použit na sekundární replice, pokud je povolené úložiště dotazů pro sekundární repliky. Volitelný argument query_hint_scope je výchozí pouze pro místní repliku (primární nebo sekundární), ale volitelně můžete zadat replica_group_id odkazující na sys.query_store_replicas.
Návratová hodnota
0
(úspěch) nebo 1
(selhání).
Poznámky
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_idexistuje, hodnota zadaná pro @query_hints přepíše 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_TV
DISABLE_TSQL_SCALAR_UDF_INLINING
- nápovědy k tabulce (například SILEEK, READUNCOMMITTED, INDEX)
Dovolení
Vyžaduje oprávnění ALTER pro databázi.
Příklady
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 qt
INNER JOIN sys.query_store_query 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 aplikuje nápovědu RECOMPILE na query_id 39, jak je uvedeno v úložišti dotazů:
EXEC 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ů:
EXEC 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á několik tipů dotazu na query_id 39, včetně RECOMPILE, MAXDOP 1 a chování optimalizátoru dotazů SQL 2012:
EXEC 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, 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.
EXEC sys.sp_query_store_clear_hints @query_id = 39;
Související obsah
- nápovědy k úložišti dotazů
- tabulek (Transact-SQL)
- sp_query_store_clear_hints (Transact-SQL)
- sys.query_store_query_hints (Transact-SQL)
- Monitorování výkonu pomocí úložiště dotazů