Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à : SQL Server 2022 (16.x) et versions
ultérieures d’Azure SQL Database Azure SQL
Managed Instance
SQL Database dans Microsoft Fabric
Crée ou met à jour des indicateurs Magasin des requêtes pour une query_id donnée.
Conventions de la syntaxe Transact-SQL
Syntax
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @replica_group_id = ] 'replica_group_id' ]
[ ; ]
Arguments
Important
Les arguments des procédures stockées étendues doivent être entrés dans l’ordre spécifique, comme décrit dans la section syntaxe. Si les paramètres sont entrés hors ordre, un message d’erreur se produit.
[ @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).
Lorsqu’il USE HINT est inclus dans l’argument @query_hints , les guillemets uniques autour des noms d’indicateurs individuels doivent être répétés. Par exemple : @query_hints = N'OPTION (MAXDOP = 1, USE HINTS (''ENABLE_QUERY_OPTIMIZER_HOTFIXES'',''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))'.
Pour plus d’informations, consultez indicateurs de requête pris en charge.
[ @replica_group_id = ] 'replica_group_id'
Ce paramètre facultatif détermine l’étendue à laquelle l’indicateur est appliqué sur un réplica secondaire lorsque le Magasin des requêtes pour les secondaires lisibles est activé. @replica_group_id est bigint. Le magasin de requêtes pour les répliques secondaires est pris en charge à partir de SQL Server 2025 (17.x) et versions ultérieures, ainsi que dans Azure SQL Database. Pour la prise en charge complète de la plateforme, voir Query Store pour les répliques secondaires.
L’argument @replica_group_id est défini par défaut sur le réplica local (principal ou secondaire), mais vous pouvez éventuellement spécifier une valeur correspondant à une valeur dans la replica_group_id colonne dans sys.query_store_replicas pour définir un indicateur pour un autre groupe de réplicas.
Valeur retournée
0 (réussite) or 1 (échec).
Remarks
Les conseils sont spécifiés au format de chaîne valide T-SQL N'OPTION (..)'.
- Si aucun indicateur du Magasin des requêtes n’existe pour une @query_idspécifique, un nouvel indicateur du Magasin des requêtes est créé.
- Si un indicateur du Magasin des requêtes existe déjà pour un @query_id spécifique, la valeur spécifiée pour @query_hints remplace les indicateurs précédemment spécifiés pour la requête associée.
- Si un query_id n’existe pas, une erreur est générée.
Dans le cas où l’un des indicateurs empêcherait la production d’un plan de requête, tous les indicateurs sont ignorés. Pour plus d’informations sur les détails de l’échec, consultez 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_TVDISABLE_TSQL_SCALAR_UDF_INLINING-
Indicateurs de table (par exemple,
FORCESEEK,READUNCOMMITTED,INDEX)
Permissions
Requiert l’autorisation ALTER sur la base de données.
Examples
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 vues de catalogue système du Magasin des requêtes :
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
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 le Magasin des requêtes :
EXECUTE 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 :
EXECUTE 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 1et le comportement de l’optimiseur de requête au niveau de compatibilité 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''))';
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,
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;
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.
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;