3

嗨,我有一个简单的问题。但这又引出了另一个问题。我想删除我运行的存储过程的查询计划。所以我使用

exec dbo.uspNameOfProc

然后使用查询检查计划追逐

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%'

我还缺少什么?

4

2 回答 2

4

RUNexec 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* * * 确保在单独的查询窗口上执行这些操作,以免改变执行计划。

于 2013-01-24T17:30:37.107 回答
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');
于 2013-01-24T17:57:01.220 回答