sys.sp_query_store_set_hints (Transact-SQL)
gäller för: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
Skapar eller uppdaterar Query Store-tips för en viss query_id.
Transact-SQL syntaxkonventioner
Syntax
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @query_hint_scope = ] 'replica_group_id' ]
[ ; ]
Argument
Viktigt!
Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.
[ @query_id = ] query_id
Kolumnen Query Store query_id
från sys.query_store_query.
@query_id är bigint.
[ @query_hints = ] N'query_hints'
En teckensträng med frågealternativ som börjar med OPTION
.
@query_hints är nvarchar(max). Mer information finns i frågetips som stöds i den här artikeln.
[ @query_hint_scope = ] "replica_group_id"
Som standard är omfånget för ett nytt Query Store-tips endast den lokala repliken. @query_hint_scope är tinyint. Den här valfria parametern avgör i vilken omfattning tipset ska tillämpas på en sekundär replik när Query Store för sekundära repliker är aktiverat. Det valfria query_hint_scope argumentet är som standard endast den lokala repliken (primär eller sekundär), men du kan också ange en replica_group_id som refererar till sys.query_store_replicas.
Returvärde
0
(lyckades) eller 1
(fel).
Anmärkningar
Tips anges i ett giltigt T-SQL-strängformat N'OPTION (..)'
.
- Om det inte finns några Query Store-tips för en specifik @query_idskapas ett nytt Query Store-tips.
- Om det redan finns ett Query Store-tips för en specifik @query_idåsidosätter det värde som angetts för @query_hints tidigare angivna tips för den associerade frågan.
- Om det inte finns någon query_id genereras ett fel.
Om ett av tipsen skulle förhindra att en frågeplan skapas ignoreras alla tips. Mer information om felinformation finns i sys.query_store_query_hints.
Om du vill ta bort tips som är associerade med en query_idanvänder du den system lagrade proceduren sys.sp_query_store_clear_hints.
Frågetips som stöds
Dessa frågetips stöds som Query Store-tips:
{ 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 ] )
Följande frågetips stöds för närvarande inte:
OPTIMIZE FOR ( @var = val)
MAXRECURSION
-
USE PLAN
(överväg i stället frågearkivets ursprungliga kapacitet för att tvinga fram planen, sp_query_store_force_plan). DISABLE_DEFERRED_COMPILATION_TV
DISABLE_TSQL_SCALAR_UDF_INLINING
- tabelltips (till exempel FORCESEEK, READUNCOMMITTED, INDEX)
Behörigheter
Kräver ALTER-behörigheten för databasen.
Exempel
Identifiera en fråga i Query Store
Följande exempel frågar sys.query_store_query_text och sys.query_store_query för att returnera query_id för ett kört frågetextfragment.
I det här exemplet finns frågan som vi försöker finjustera i SalesLT
exempeldatabas:
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;
Query Store återspeglar inte omedelbart frågedata till sina systemvyer.
Identifiera frågan i frågearkivets systemkatalogvyer:
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
I följande exempel identifierades det tidigare frågeexemplet i SalesLT
-databasen som query_id 39.
Använd ett tips
I följande exempel tillämpas RECOMPILE-tipset på query_id 39, enligt beskrivningen i Query Store:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE)';
I följande exempel används tipset för att tvinga äldre kardinalitetsestimator till query_id 39, som identifieras i Query Store:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Tillämpa flera tips
I följande exempel används flera frågetips för query_id 39, inklusive RECOMPILE, MAXDOP 1 och SQL 2012-frågeoptimerarbeteendet:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
Visa tips för Query Store
I följande exempel returneras befintliga Query Store-tips:
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;
Ta bort tipset från en fråga
Använd följande exempel för att ta bort tipset från query_id 39 med hjälp av den sp_query_store_clear_hints system lagrade proceduren.
EXEC sys.sp_query_store_clear_hints @query_id = 39;