为存储过程执行ALTER PROCEDURE
语句是否会导致该存储过程的所有缓存执行计划失效并在SQL Server 2008/2005中失效?更改存储过程是否过期高速缓存的执行计划?
回答
是的。
您可以通过之前和之后做
SELECT * FROM sys.dm_exec_procedure_stats
where object_id = object_id('YourProc', 'P')
验证这一点。
[情形,其中计划将从缓存中删除包含]全球运营喜欢跑步
DBCC FREEPROCCACHE
清除从缓存中所有的计划,以及改变单一的程序,如ALTER PROCEDURE
,这会从缓存中删除该过程的所有计划。
虽然我确实相信你(因为你有很好的声誉),这是记录在MSDN上的任何地方 – Kane
是的。会找到一个链接。 –
http://msdn.microsoft.com/en-us/library/ms181055.aspx –
是的。当然,这是很容易检验一下自己:
- 创建过程
- 执行了几次
- 确认它是通过检查sys.dm_exec_cached_plans
- 改变程序
- 在该行缓存sys.dm_exec_cached_plans走了
CREATE PROCEDURE dbo.blat AS SELECT 1; GO EXEC dbo.blat; GO 5 SELECT COUNT(*) FROM sys.dm_exec_cached_plans AS p CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS s WHERE [sql].[text] LIKE '%dbo.blat%';
ALTER PROCEDURE dbo.blat AS SELECT 22;
GO
SELECT COUNT(*) FROM sys.dm_exec_cached_plans AS p
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS s
WHERE [sql].[text] LIKE '%dbo.blat%';
它确实 - 但可能有其他因素。
有时会出现严重的性能问题,我发现明确运行DBCC FREEPROCCACHE
可以极大地提高系统的性能。当然,如果你知道它有问题,你也可以明确地清除单个sproc的缓存。
这是在这种情况下,计划缓存充满了大量的单次使用adhoc查询或什么?如果对adhoc工作负载进行优化可能是一种选择。 –
说实话,我已经看过几次了,第一次尝试解决时花了很多时间 - 有承包商和一切。我们从来没有去过这条路线,只是发现在大量数据库更新后有时需要调用'DBCC FREEPROCCACHE'。 – TheCodeKing
- 1. Oracle存储过程的执行计划
- 2. 存储过程优化执行计划?
- 3. 修改存储过程是否更新存储过程定义?
- 4. 是否WCF缓存存储过程
- 5. 如何显示存储过程的执行计划?
- 6. 修改不执行的存储过程
- 7. 执行计划 - 散列与合并sql与存储过程
- 8. 如何提高mulesoft存储过程插入执行速度?
- 9. 创建存储过程的计划
- 10. Azure表存储API高速缓存结果是否存在?
- 11. 执行SQL存储过程
- 12. 当执行存储过程
- 13. 执行另一个存储过程的存储过程
- 14. 更改存储过程
- 15. DB2更改存储过程
- 16. “高速缓存”过程的强大计算替代方案
- 17. 从SQL Server存储过程执行Oracle存储过程
- 18. 在另一个存储过程中未执行存储过程
- 19. 在存储过程中执行存储过程
- 20. 通过ODBC执行存储过程
- 21. 通过sp_executesql执行存储过程
- 22. 存储过程的sys_refcursor输出是否被缓存?
- 23. 部署配置 - 只执行新的和更改存储过程
- 24. 存储过程是否锁定表/行?
- 25. 使我的存储过程更高效
- 26. 实体框架是否将其DbContext与高速缓存的查询计划一起存储?
- 27. Rails缓存,继续存储过期值
- 28. 软锁定的高速缓存条目是通过底层的Ehcache过期
- 29. 我的存储过程是否按顺序执行?
- 30. C#高速缓存未显示存储在高速缓存中的原始值
是的,它会做 –
感谢所有回答的人 – Kane