sys.fn_validate_plan_guide (Transact-SQL)
Vérifie la validité du repère de plan spécifié. La fonction sys.fn_validate_plan_guide retourne le premier message d'erreur rencontré lorsque le repère 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 repère de plan tel qu'indiqué dans l'affichage catalogue sys.plan_guides. plan_guide_id est de type int et n'a pas de 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.
Exemples
A.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 AdventureWorks2012;
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 fonction sys.fn_validate_plan_guide est exécutée pour déterminer si cette action invalidera des 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 AdventureWorks2012;
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
Référence
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)