Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
Hiermee maakt of werkt u Query Store-hints voor een bepaalde query_id.
Transact-SQL syntaxisconventies
Syntaxis
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @query_hint_scope = ] 'replica_group_id' ]
[ ; ]
Argumenten
Belangrijk
Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.
[ @query_id = ] query_id
De kolom Query Store query_id
uit sys.query_store_query.
@query_id is grote.
[ @query_hints = ] N'query_hints'
Een tekenreeks met queryopties die beginnen met OPTION
.
@query_hints is nvarchar(max). Zie Ondersteunde queryhints in dit artikel voor meer informatie.
[ @query_hint_scope = ] 'replica_group_id'
Standaard is het bereik van een nieuwe Query Store-hint alleen de lokale replica. @query_hint_scope is klein. Deze optionele parameter bepaalt het bereik waarop de hint wordt toegepast op een secundaire replica wanneer Query Store voor secundaire replica's is ingeschakeld. Het optionele query_hint_scope argument wordt alleen standaard ingesteld op de lokale replica (primair of secundair), maar u kunt desgewenst een replica_group_id opgeven waarnaar sys.query_store_replicasverwijst.
Retourwaarde
0
(geslaagd) of 1
(mislukt).
Opmerkingen
Hints worden opgegeven in een geldige T-SQL-tekenreeksindeling N'OPTION (..)'
.
- Als er geen Query Store-hints bestaan voor een specifieke @query_id, wordt er een nieuwe Query Store-hint gemaakt.
- Als er al een Query Store-hint bestaat voor een specifieke @query_id, wordt de waarde die is opgegeven voor @query_hints eerder opgegeven hints voor de bijbehorende query overschreven.
- Als er geen query_id bestaat, wordt er een fout gegenereerd.
In het geval dat een van de hints verhindert dat een queryplan wordt geproduceerd, worden alle hints genegeerd. Zie sys.query_store_query_hintsvoor meer informatie over foutdetails.
Als u hints wilt verwijderen die zijn gekoppeld aan een query_id, gebruikt u de opgeslagen procedure van het systeem sys.sp_query_store_clear_hints.
Ondersteunde queryhints
Deze queryhints worden ondersteund als Query Store-hints:
{ 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 ] )
De volgende queryhints worden momenteel niet ondersteund:
OPTIMIZE FOR ( @var = val)
MAXRECURSION
-
USE PLAN
(overweeg in plaats daarvan het oorspronkelijke plan van Query Store, sp_query_store_force_plan). DISABLE_DEFERRED_COMPILATION_TV
DISABLE_TSQL_SCALAR_UDF_INLINING
- tabelhints (bijvoorbeeld FORCESEEK, READUNCOMMITTED, INDEX)
Machtigingen
Hiervoor is de machtiging ALTER vereist voor de database.
Voorbeelden
Een query identificeren in Query Store
In het volgende voorbeeld worden query's sys.query_store_query_text en sys.query_store_query om de query_id te retourneren voor een uitgevoerd querytekstfragment.
In dit voorbeeld bevindt de query die we proberen af te stemmen zich in de SalesLT
voorbeelddatabase:
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 geeft niet onmiddellijk querygegevens weer in de systeemweergaven.
Identificeer de query in de systeemcatalogusweergaven van Query Store:
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
In de volgende voorbeelden is het vorige queryvoorbeeld in de SalesLT
database geïdentificeerd als query_id 39.
Eén hint toepassen
In het volgende voorbeeld wordt de hint RECOMPILE toegepast op query_id 39, zoals aangegeven in Query Store:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE)';
In het volgende voorbeeld wordt de hint toegepast om de verouderde kardinaliteitsschatter af te dwingen op query_id 39, geïdentificeerd in Query Store:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Meerdere hints toepassen
In het volgende voorbeeld worden meerdere queryhints toegepast op query_id 39, waaronder RECOMPILE, MAXDOP 1 en het gedrag van de SQL 2012-queryoptimalisatie:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
Query Store-hints weergeven
In het volgende voorbeeld worden bestaande Query Store-hints geretourneerd:
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;
De hint uit een query verwijderen
Gebruik het volgende voorbeeld om de hint uit query_id 39 te verwijderen met behulp van de sp_query_store_clear_hints systeem opgeslagen procedure.
EXEC sys.sp_query_store_clear_hints @query_id = 39;