如何在sql server中清除1个存储过程的缓存

srh*_*srh 11 sql-server

我正在使用SQL Server 2008 R2.

我知道这DBCC FREEPROCCACHE将清除SQL Server中所有存储过程的缓存.

但我需要的是清除只有1个存储过程的缓存.我怎样才能做到这一点?

存储过程名称是Rpt_RegionReport.我不想用WITH RECOMPILE选项执行存储过程.

谢谢

Lua*_*aan 11

DBCC FreeProcCache 有一个可选参数 - 要删除的执行计划的ID.

您可以sys.dm_exec_cached_plans使用它找到要删除的计划,然后您可以将其用作

DBCC FREEPROCCACHE (0x0123456....);
Run Code Online (Sandbox Code Playgroud)

  • 真棒.我得到了带有这个查询的plan_handle:`从sys.dm_exec_cached_plans中选择cp.plan_handle cp CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle)st其中OBJECT_NAME(st.objectid,st.dbid)='Rpt_RegionReport'`然后将其存储在变量并将其传递给`DBCC FREEPROCCACHE` (7认同)

San*_*hya 8

执行sp_recompile存储过程不起作用吗?

EXEC sp_recompile N'SP_Name'; 
Run Code Online (Sandbox Code Playgroud)


小智 5

以下是另一种仅针对存储过程从缓存中删除计划的方法:

DECLARE @PlanHandle VARBINARY(64);

SELECT  @PlanHandle = deps.plan_handle
FROM    sys.dm_exec_procedure_stats AS deps
WHERE   deps.object_id = OBJECT_ID('dbo.SomeProcedureName') AND deps.database_id = DB_ID();

IF @PlanHandle IS NOT NULL
    BEGIN
        DBCC FREEPROCCACHE(@PlanHandle);
    END
GO
Run Code Online (Sandbox Code Playgroud)