[SQL Server] Supprimer du cache les plans d’exécution d’une requête
/*
Auteur : KHARROUBI Zouhaier
Date Création : 17/12/2013
Objectif : supprimer du cache les plans d'exécution pour une requête donnée
Le but est d'enlever les plans qui sont stockés plusieurs fois
*/
DECLARE @plan_handle VARBINARY(60)=NULL
SELECT TOP 1 @plan_handle=ecp.plan_handle FROM sys.dm_exec_cached_plans ecp
CROSS APPLY sys.dm_exec_sql_text(ecp.plan_handle) sql
WHERE sql.text LIKE 'INSERT INTO #table1 SELECT * FROM OPENQUERY(LIEN_SERVER1,''select pays,magasin,date_vente,montant_vente from vente %'
ORDER BY ecp.bucketid
WHILE @plan_handle IS NOT NULL
BEGIN
--Supprimer le plan d'execution
DBCC FREEPROCCACHE(@plan_handle)
SELECT @plan_handle = NULL
--Trouver le plan d'execution suivant
IF EXISTS(SELECT COUNT(sql.text) nbre_plan,ecp.size_in_bytes,sql.text FROM sys.dm_exec_cached_plans ecp
CROSS APPLY sys.dm_exec_sql_text(ecp.plan_handle) sql
WHERE sql.text LIKE 'INSERT INTO table1 SELECT * FROM OPENQUERY(LIEN_SERVER1,''select pays,magasin,date_vente, montant_vente from vente %'
GROUP BY text,size_in_bytes HAVING COUNT(text)>1)
BEGIN
SELECT TOP 1 @plan_handle=ecp.plan_handle FROM sys.dm_exec_cached_plans ecp
CROSS APPLY sys.dm_exec_sql_text(ecp.plan_handle) sql
WHERE sql.text LIKE 'INSERT INTO table1 SELECT * FROM OPENQUERY(LIEN_SERVER1,''select pays,magasin,date_vente, montant_vente from vente %'
ORDER BY ecp.bucketid
END
END