嗨,我有一个简单的问题。但它引出了另一个问题。我想删除stor proc i ran的查询计划。所以我使用
运行了procexec dbo.uspNameOfProc
然后使用查询检查计划chace
SELECT [text], cp.size_in_bytes, plan_handle
FROM sys.dm_exec_cached_plans AS cp CROSS APPLY
sys.dm_exec_sql_text(plan_handle)
where [text] like '%uspNameOfProc%'
我还缺少什么?
答案 0 :(得分:4)
运行exec dbo.uspNameOfProc
然后运行sp_who3找出它正在运行的spid。
Then run USE master;
GO
SELECT * FROM sys.dm_exec_requests
WHERE session_id = YourSPID;
GO
这将为您提供计划处理。要查看执行计划,请执行。
USE master;
GO
SELECT * FROM sys.dm_exec_query_plan (YourPlanHandleID);
GO
然后,如果您希望从缓存中清除计划,请使用此功能。
DBCC FREEPROCCACHE (YourPlanHandleID);
GO
希望有所帮助。 UPDATE * * * 确保在单独的查询窗口上执行这些操作,以免改变执行计划。
答案 1 :(得分:2)
获取计划句柄(因为您正在使用存储过程)的一种稍微简单的方法是来自sys.dm_exec_procedure_stats。像(来自你的数据库):
select plan_handle
from sys.dm_exec_procedure_stats
where database_id = db_id()
and object_id = object_id('dbo.uspNameOfProc');