sys.fn_validate_plan_guide (Transact-SQL)

S’applique à :SQL ServerAzure SQL Managed Instance

Vérifie la validité du repère de plan spécifié. La sys.fn_validate_plan_guide fonction retourne le premier message d’erreur rencontré lorsque le guide de plan est appliqué à sa requête. Un ensemble de lignes vide est retourné lorsque le repère de plan est valide. Les repères de plan peuvent devenir non valides lorsque des modifications sont apportées à la conception physique de la base de données. Par exemple, si un repère de plan spécifie un index particulier et que cet index est ensuite supprimé, la requête ne peut plus utiliser ce repère de plan.

En validant un repère de plan, vous pouvez déterminer si le repère peut être utilisé par l'optimiseur sans modification. Selon les résultats de la fonction, vous pouvez décider de supprimer le repère de plan et paramétrer à nouveau la requête, ou de modifier la conception de base de données, par exemple, en recréant l'index spécifié dans le repère de plan.

Conventions de la syntaxe Transact-SQL

Syntaxe

sys.fn_validate_plan_guide ( plan_guide_id )  

Arguments

plan_guide_id
ID du guide de plan comme indiqué dans la vue catalogue sys.plan_guides . plan_guide_id est int sans valeur par défaut.

Table retournée

Nom de la colonne Type de données Description
msgnum int ID du message d'erreur.
severity tinyint Niveau de gravité du message, entre 1 et 25.
state smallint Numéro d'état de l'erreur indiquant le point dans le code au niveau duquel l'erreur s'est produite.
message nvarchar(2048) Texte du message de l'erreur.

Autorisations

Les repères de plan de portée OBJECT requièrent une autorisation VIEW DEFINITION ou ALTER sur l'objet et les autorisations référencés pour compiler la requête ou le lot fourni dans le repère de plan. Par exemple, si un lot contient des instructions SELECT, des autorisations SELECT sont requises sur les objets référencés.

Les repères de plan de portée SQL ou TEMPLATE requièrent une autorisation ALTER sur la base de données et les autorisations pour compiler la requête ou le lot fourni dans le repère de plan. Par exemple, si un lot contient des instructions SELECT, des autorisations SELECT sont requises sur les objets référencés.

Notes

La sys.fn_validate_plan_guide fonction n’est pas disponible dans Azure SQL Database.

Exemples

R. Validation de tous les repères de plan dans une base de données

L'exemple suivant vérifie la validité de tous les repères de plan dans la base de données actuelle. Si un jeu de résultats vide est retourné, tous les repères de plan sont valides.

USE AdventureWorks2022;  
GO  
SELECT plan_guide_id, msgnum, severity, state, message  
FROM sys.plan_guides  
CROSS APPLY fn_validate_plan_guide(plan_guide_id);  
GO  

B. Test de la validation des repères de plan avant d'implémenter une modification de la base de données

L'exemple suivant utilise une transaction explicite pour supprimer un index. La sys.fn_validate_plan_guide fonction est exécutée pour déterminer si cette action invalidera tous les repères de plan dans la base de données. En fonction des résultats de la fonction, l'instruction DROP INDEX est validée ou la transaction est restaurée, et l'index n'est pas supprimé.

USE AdventureWorks2022;  
GO  
BEGIN TRANSACTION;  
DROP INDEX IX_SalesOrderHeader_CustomerID ON Sales.SalesOrderHeader;  
-- Check for invalid plan guides.  
IF EXISTS (SELECT plan_guide_id, msgnum, severity, state, message  
           FROM sys.plan_guides  
           CROSS APPLY sys.fn_validate_plan_guide(plan_guide_id))  
    ROLLBACK TRANSACTION;  
ELSE  
    COMMIT TRANSACTION;  
GO  

Voir aussi

Repères de plan
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)