清除计划缓存的八种不同方法
1。从整个实例的计划缓存中删除所有元素
DBCC FREEPROCCACHE;
使用它来仔细清除计划缓存。例如,释放计划缓存会导致重新编译存储过程,而不是从缓存中重用。这可能会导致查询性能突然暂时下降。
2。刷新整个实例的计划缓存并抑制常规完成消息
“DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。”
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
3。刷新整个实例的临时和准备好的计划缓存
DBCC FREESYSTEMCACHE ('SQL Plans');
4。刷新一个资源池的临时和准备好的计划缓存
DBCC FREESYSTEMCACHE ('SQL Plans', 'LimitedIOPool');
5。刷新一个资源池的整个计划缓存
DBCC FREEPROCCACHE ('LimitedIOPool');
6。从一个数据库的计划缓存中删除所有元素(在 SQL Azure 中不起作用)
-- Get DBID from one database name first
DECLARE @intDBID INT;
SET @intDBID = (SELECT [dbid]
FROM master.dbo.sysdatabases
WHERE name = N'AdventureWorks2014');
DBCC FLUSHPROCINDB (@intDBID);
7。清除当前数据库的计划缓存
USE AdventureWorks2014;
GO
-- New in SQL Server 2016 and SQL Azure
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
8。从缓存中删除一个查询计划
USE AdventureWorks2014;
GO
-- Run a stored procedure or query
EXEC dbo.uspGetEmployeeManagers 9;
-- Find the plan handle for that query
-- OPTION (RECOMPILE) keeps this query from going into the plan cache
SELECT cp.plan_handle, cp.objtype, cp.usecounts,
DB_NAME(st.dbid) AS [DatabaseName]
FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE OBJECT_NAME (st.objectid)
LIKE N'%uspGetEmployeeManagers%' OPTION (RECOMPILE);
-- Remove the specific query plan from the cache using the plan handle from the above query
DBCC FREEPROCCACHE (0x050011007A2CC30E204991F30200000001000000000000000000000000000000000000000000000000000000);
来源123