存储过程在首次使用时编译。
有清除缓存的选项:
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
--To Verify whether the cache is emptied
--DBCC PROCCACHE
或重新编译或减少重新编译。
但是是否可以强制将经常使用的存储过程的执行计划预先缓存并保留在内存中?
我知道如何在 ADO.NET 中执行此操作,即从 SQL Server 外部执行此操作,但这个问题是如何在 SQL Server 内部执行操作 - 将在 SQL Server 本身启动时启动。
(*) 例如,我在 SSMS 活动监视器中看到一个正在运行的进程(任务状态:RUNNING,命令:SELECT),尽管 SQL Server 代理被禁用并且 SQL服务器没有被任何东西加载,请参阅“所有这些 SQL Server 会话来自哪里? ”中的“会话 54 的详细信息”。
我将如何定期回收存储过程?
相关问题:
存储过程在第一次运行时执行缓慢
更新:
可能我应该在 2 中提出这个问题,但我的主要好奇心是如何在禁用 SQL Server 代理的情况下进行定期/循环活动?
上面提到的 RUNNING SELECT 会话 (*) 是如何制作的?
更新 2:
在执行查询非常少量数据的存储过程时,我经常观察到相当大的延迟,这不能仅通过读取大量数据的必要性来解释。
我们是否可以将这一点 - 对微不足道的小数据的相当大的延迟 - 作为这个问题的背景?