décembre
2010
Au cours de l’optimisation d’une requête, on peut avoir besoin de supprimer le plan d’exécution associé à la requête initiale.
————————————————————————-
– Description : Supprimer le plan de la requte du cache
– Auteur : Etienne ZINZINDOHOUE
————————————————————————-
————————————————————————-
– Soit supprimer le plan d'excution de la requte suivante
————————————————————————-
– Variable
DECLARE /* Perf_Req */ @PlanRequete VARBINARY (64);
– la requte
USE AdventureWorks
SELECT TOP(5) LastName
FROM Person.Contact
WHERE LastName LIKE 'A%';
————————————————————————-
– Supprimer le plan de la requte du cache
————————————————————————-
– Recuperer et Insrer le plan de la requte dans une table temporaire
DECLARE @LigneEnCoursTraitement varbinary(64),@SQL VARCHAR(MAX),@DEL VARCHAR(MAX)
SELECT plan_handle
INTO #tmpTable
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N’DECLARE %Perf_Req%’;
– Tant qu'il y a des lignes dans la table temporaire
WHILE EXISTS ( SELECT plan_handle
FROM #tmpTable
)
BEGIN
– Se positionner sur la 1re ligne de la table temporaire
SET @LigneEnCoursTraitement = (SELECT TOP 1 plan_handle FROM #tmpTable)
– Supprimer le plan de la requte du cache.
DBCC FREEPROCCACHE (@LigneEnCoursTraitement) WITH NO_INFOMSGS
– Supprimer la ligne traite de la table temporaire
DELETE FROM #tmpTable WHERE plan_handle = @LigneEnCoursTraitement ;
END
–Supprimer la table temporaire
DROP TABLE #tmpTable
————————————————————————-
– Vérifier l'absence (ou prsence) du plan de la requte dans le cache
————————————————————————-
SELECT plan_handle,text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N’DECLARE %Perf_Req%’;