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'
[ , [ @replica_group_id = ] 'replica_group_id' ]
[ ; ]
Arguments
Important
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).
När USE HINT ingår i @query_hints argumentet måste de enskilda citatteckna kring enskilda tipsnamn upprepas. Till exempel @query_hints = N'OPTION (MAXDOP = 1, USE HINTS (''ENABLE_QUERY_OPTIMIZER_HOTFIXES'',''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))'.
Mer information finns i Frågetips som stöds.
[ @replica_group_id = ] "replica_group_id"
Den här valfria parametern avgör omfånget där tipset tillämpas på en sekundär replik när Query Store för läsbara sekundärfiler är aktiverat. @replica_group_id är storint.
Argumentet @replica_group_id är standardinställningen för den lokala repliken (primär eller sekundär), men du kan också ange ett värde som matchar ett värde i replica_group_id kolumnen i sys.query_store_replicas för att ange ett tips för en annan replikgrupp.
Return value
0 (lyckades) eller 1 (fel).
Remarks
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 ersätter värdet som angetts för @query_hints de tidigare angivna tipsen för den associerade frågan.
- Om det inte finns någon query_id utlöses 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_TVDISABLE_TSQL_SCALAR_UDF_INLINING-
Tabelltips (till exempel
FORCESEEK,READUNCOMMITTED,INDEX)
Permissions
Kräver ALTER behörighet för databasen.
Examples
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 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
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 tipset på query_id 39, enligt beskrivningen RECOMPILE i Query Store:
EXECUTE 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:
EXECUTE 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 tillämpas flera frågetips på query_id 39, inklusive RECOMPILE, MAXDOP 1och frågeoptimerarbeteendet på kompatibilitetsnivå 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''))';
Visa tips för Query Store
I följande exempel returneras befintliga Query Store-tips:
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;
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.
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;