Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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;