爲存儲過程執行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. 修改存儲過程是否更新存儲過程定義?
- 5. 是否WCF緩存存儲過程
- 6. SQL執行計劃緩存
- 7. SQL Server查詢計劃緩存和計劃重用的存儲過程
- 8. 使用Windows任務計劃程序執行存儲過程
- 9. 比較不同查詢中的存儲過程執行計劃
- 10. 如何顯示存儲過程的執行計劃?
- 11. 修改不執行的存儲過程
- 12. 執行計劃 - 散列與合併sql與存儲過程
- 13. 如何提高mulesoft存儲過程插入執行速度?
- 14. 創建存儲過程的計劃
- 15. Azure表存儲API高速緩存結果是否存在?
- 16. 執行存儲過程OnClick
- 17. 執行存儲過程
- 18. 執行SQL存儲過程
- 19. 執行存儲過程
- 20. Rails執行存儲過程
- 21. 當執行存儲過程
- 22. 執行存儲過程
- 23. 存儲過程存儲在哪裏?它創建時是否創建執行計劃?
- 24. 存儲過程計劃優化
- 25. 在存儲過程中執行帶參數的存儲過程
- 26. 執行另一個存儲過程的存儲過程
- 27. DB2更改存儲過程
- 28. 更改存儲過程
- 29. (ASP.NET高速緩存API)是否可能在緩存設置過期之前從緩存中刪除項目?
- 30. 「高速緩存」過程的強大計算替代方案
是的,它會做 –
感謝所有回答的人 – Kane