sys.sp_query_store_set_hints (Transact-SQL)
S’applique à : SQL Server 2022 (16.x)base de données Azure SQL Azure SQL Managed Instance
Crée ou met à jour des indicateurs Magasin des requêtes pour une query_id donnée.
Conventions de la syntaxe Transact-SQL
Syntaxe
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @query_hint_scope = ] 'replica_group_id' ]
[ ; ]
Arguments
[ @query_id = ] query_id
Colonne Magasin des requêtes query_id
de sys.query_store_query. @query_id est bigint.
[ @query_hints = ] N’query_hints'
Chaîne de caractères d’options de requête commençant par OPTION
. @query_hints est nvarchar(max). Pour plus d’informations, consultez les indicateurs de requête pris en charge dans cet article.
[ @query_hint_scope = ] 'replica_group_id'
Par défaut, l’étendue d’un nouvel indicateur de Magasin des requêtes est le réplica local uniquement. @query_hint_scope est minuscule. Ce paramètre facultatif détermine l’étendue à laquelle l’indicateur sera appliqué sur un réplica secondaire lorsque Magasin des requêtes pour les réplicas secondaires est activé. L’argument query_hint_scope facultatif est défini par défaut uniquement sur le réplica local (principal ou secondaire), mais vous pouvez éventuellement spécifier une replica_group_id référençant sys.query_store_replicas.
Valeur retournée
0
(réussite) or 1
(échec).
Notes
Les conseils sont spécifiés au format de chaîne valide T-SQL N'OPTION (..)'
.
- Si aucun indicateur Magasin des requêtes n’existe pour un query_id spécifique, un nouvel indicateur de Magasin des requêtes est créé.
- Si un indicateur Magasin des requêtes existe déjà pour une query_id spécifique, la dernière valeur fournie remplace les valeurs précédemment spécifiées pour la requête associée.
- Si un query_id n’existe pas, une erreur est générée.
Si un indicateur provoque l’échec d’une requête, il sera ignoré. En outre, vous pourrez voir les détails concernant le dernier échec dans sys.query_store_query_hints.
Pour supprimer des indicateurs associés à un query_id, utilisez la procédure stockée système sys.sp_query_store_clear_hints.
Indicateurs de requête pris en charge
Ces indicateurs de requête sont pris en charge en tant qu conseils du Magasin des requêtes :
{ 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 ] )
Actuellement, les indicateurs de requête suivants ne sont pas pris en charge :
OPTIMIZE FOR ( @var = val)
MAXRECURSION
USE PLAN
(au lieu de cela, envisagez la fonctionnalité de forçage de plan d’origine de Magasin des requêtes, sp_query_store_force_plan).DISABLE_DEFERRED_COMPILATION_TV
DISABLE_TSQL_SCALAR_UDF_INLINING
- Conseils du tableau (par exemple, FORCESEEK, READUNCOMMITTED, INDEX)
autorisations
Exige l’autorisation ALTER sur la base de données.
Exemples
Identifier une requête dans le Magasin des requêtes
L’exemple suivant interroge sys.query_store_query_text et sys.query_store_query pour renvoyer le query_id pour un fragment de texte de requête exécuté.
Dans cet exemple, la requête que nous essayons d’ajuster se trouve dans l’exemple de base de données 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;
Le Magasin des requêtes ne reflète pas immédiatement les données de requête à ses affichages système.
Identifiez la requête dans les affichages catalogue système du magasin de requêtes :
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
Dans les exemples suivants, l’exemple de requête précédent dans la SalesLT
base de données a été identifié comme query_id 39.
Appliquer un conseil unique
L’exemple suivant applique l’indicateur RECOMPILE à query_id 39, comme identifié dans Magasin des requêtes :
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE)';
L’exemple suivant applique l’indicateur pour forcer l’estimateur de cardinalité héritée à query_id 39, identifié dans Magasin des requêtes :
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Appliquer plusieurs conseils
L’exemple suivant applique plusieurs indicateurs de requête à query_id 39, notamment RECOMPILE, MAXDOP 1 et le comportement de l’optimiseur de requête 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''))';
Afficher les conseils du Magasin des requêtes
L’exemple suivant retourne les indicateurs du Magasin des requêtes existants:
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;
Supprimer le conseil d’une requête
Utilisez l’exemple suivant pour supprimer l’indicateur de query_id 39, à l’aide de la procédure stockée système sp_query_store_clear_hints.
EXEC sys.sp_query_store_clear_hints @query_id = 39;