2011-09-06 111 views

回答

7

是的。

您可以通過之前和之後做

SELECT * FROM sys.dm_exec_procedure_stats 
where object_id = object_id('YourProc', 'P') 

驗證這一點。

TechNet

[情形,其中計劃將從緩存中刪除包含]全球運營喜歡跑步DBCC FREEPROCCACHE清除從緩存中所有的計劃,以及改變單一的程序,如ALTER PROCEDURE,這會從緩存中刪除該過程的所有計劃。

+0

雖然我確實相信你(因爲你有很好的聲譽),這是記錄在MSDN上的任何地方 – Kane

+0

是的。會找到一個鏈接。 –

+0

http://msdn.microsoft.com/en-us/library/ms181055.aspx –

4

是的。當然,這是很容易檢驗一下自己:

  1. 創建過程
  2. 執行了幾次
  3. 確認它是通過檢查sys.dm_exec_cached_plans
  4. 改變程序
  5. 在該行緩存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%'; 

1

它確實 - 但可能有其他因素。

有時會出現嚴重的性能問題,我發現明確運行DBCC FREEPROCCACHE可以極大地提高系統的性能。當然,如果你知道它有問題,你也可以明確地清除單個sproc的緩存。

+0

這是在這種情況下,計劃緩存充滿了大量的單次使用adhoc查詢或什麼?如果對adhoc工作負載進行優化可能是一種選擇。 –

+0

說實話,我已經看過幾次了,第一次嘗試解決時花了很多時間 - 有承包商和一切。我們從來沒有去過這條路線,只是發現在大量數據庫更新後有時需要調用'DBCC FREEPROCCACHE'。 – TheCodeKing