【问题标题】:Where is the query plan from an SSRS report renderingSSRS 报告呈现的查询计划在哪里
【发布时间】:2013-01-08 12:53:33
【问题描述】:

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

运行 proc
exec 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%'

我还缺少什么?

【问题讨论】:

  • 尝试在 proc 中搜索一些文本,我认为对 proc 的特定调用不会包含在查询计划缓存中。
  • 感谢您的帮助。呵呵

标签: sql-server sql-server-2008 tsql stored-procedures sql-execution-plan


【解决方案1】:

RUN 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

希望对您有所帮助。 更新*** 确保在单独的查询窗口上执行这些操作,以免改变执行计划。

【讨论】:

    【解决方案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');
    

    【讨论】:

    • 虽然返回创建过程的查询
    • 以这种方式搜索的问题是每个存储过程可能有多个计划,这就是我让他跑掉 spid 的原因。
    • @Zane:我说这是一个功能。此时,您可以选择要删除的一个(或多个)。
    • @Mike_L:我看过的存储过程的每个查询计划都是一个创建过程语句,所以你的结果并不令人惊讶。
    • 是的,我正在学习东西,在我再次查看后,我发现变量旁边有常量值
    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 2013-06-06
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 2019-06-24
    相关资源
    最近更新 更多