我有一些程序沒有優化。我想分析一下這些程序是否得到優化,因爲只有大量數據才能檢查。如何跟蹤過程執行時間?
我想把一個SQL查詢放入所有將插入到一個表中的過程中,上述查詢執行的確切時間是什麼。我將創建一個表,其中我的過程將插入查詢執行時間。
有沒有什麼辦法可以做到這一點。
我有一些程序沒有優化。我想分析一下這些程序是否得到優化,因爲只有大量數據才能檢查。如何跟蹤過程執行時間?
我想把一個SQL查詢放入所有將插入到一個表中的過程中,上述查詢執行的確切時間是什麼。我將創建一個表,其中我的過程將插入查詢執行時間。
有沒有什麼辦法可以做到這一點。
如果您想將其集成到您的過程中,請在開始處設置一個存儲執行開始時間的變量,並在過程結束時用當前時間減去它。
/* Start of your procedure */
Declare @startTime datetime = GETDATE()
Declare @duration varchar
/* Your procedure */
...
/* End of your procedure */
Set @duration = CONVERT(VARCHAR(8),GETDATE() - @startTime,108)
Insert into statisticTable
Values ('procedureName', @duration)
您可以查看上面使用Dynamic Management Views ....
如果您正在使用舊版本的SQL Server,使用SQL Server Profiler中提到的東西....
像sys.dm_exec_procedure_stats這樣的DMV(SQL Server 2008 IIRC中引入的)只有聚合,所以要注意如果您的系統正常運行時間很長,或者程序被調用了很多,則可能需要很長時間才能看到平均值等等,以便正常化爲新版本的過程。 – 2012-07-11 12:43:41
你有沒有嘗試使用SQL Profiler?
在跟蹤屬性中,您可以定義存儲過程的Start Time
和End time
。這是一個非常強大的工具。
感謝Pabloker。我知道關於sql profiler,但我將不得不爲此做手動工作。 – 2012-07-11 12:48:28
你爲什麼要這麼做?有很多像DMV的,跟蹤,exevents等工具,如果你把那種代碼,您將增加開銷的PROC。對於最好的過程是dm_procedure_stats DMV,但僅適用於2008 R2及更高版本。對於舊版本,請使用dm_exec_query_stats。這些會給你更好的關於時間,邏輯io,CPU時間和物理IO等的統計信息。
而不是硬編碼''procedureName'',你可以使用'OBJECT_NAME(@@ PROCID)'。我在這裏寫了一些關於這個(但我沒有記錄過程時間):http://www.mssqltips.com/sqlservertip/2003/simple-process-to-track-and-log-sql-server-存儲過程使用/ – 2012-07-11 12:45:46
謝謝stb,我認爲它會解決我的問題。 – 2012-07-11 12:49:58
爲什麼要將其轉換爲VARCHAR()?爲什麼不把它作爲DateTime存儲?將日期和時間存儲爲字符串只是在稍後引入可能的問題。 – RBarryYoung 2012-07-14 14:02:29