2012-07-11 101 views
1

我有一些程序沒有優化。我想分析一下這些程序是否得到優化,因爲只有大量數據才能檢查。如何跟蹤過程執行時間?

我想把一個SQL查詢放入所有將插入到一個表中的過程中,上述查詢執行的確切時間是什麼。我將創建一個表,其中我的過程將插入查詢執行時間。

有沒有什麼辦法可以做到這一點。

回答

1

如果您想將其集成到您的過程中,請在開始處設置一個存儲執行開始時間的變量,並在過程結束時用當前時間減去它。

/* 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) 
+0

而不是硬編碼''procedureName'',你可以使用'OBJECT_NAME(@@ PROCID)'。我在這裏寫了一些關於這個(但我沒有記錄過程時間):http://www.mssqltips.com/sqlservertip/2003/simple-process-to-track-and-log-sql-server-存儲過程使用/ – 2012-07-11 12:45:46

+0

謝謝stb,我認爲它會解決我的問題。 – 2012-07-11 12:49:58

+0

爲什麼要將其轉換爲VARCHAR()?爲什麼不把它作爲DateTime存儲?將日期和時間存儲爲字符串只是在稍後引入可能的問題。 – RBarryYoung 2012-07-14 14:02:29

0

您可以查看上面使用Dynamic Management Views ....

如果您正在使用舊版本的SQL Server,使用SQL Server Profiler中提到的東西....

+0

像sys.dm_exec_procedure_stats這樣的DMV(SQL Server 2008 IIRC中引入的)只有聚合,所以要注意如果您的系統正常運行時間很長,或者程序被調用了很多,則可能需要很長時間才能看到平均值等等,以便正常化爲新版本的過程。 – 2012-07-11 12:43:41

1

你有沒有嘗試使用SQL Profiler

在跟蹤屬性中,您可以定義存儲過程的Start TimeEnd time。這是一個非常強大的工具。

+0

感謝Pabloker。我知道關於sql profiler,但我將不得不爲此做手動工作。 – 2012-07-11 12:48:28

0

你爲什麼要這麼做?有很多像DMV的,跟蹤,exevents等工具,如果你把那種代碼,您將增加開銷的PROC。對於最好的過程是dm_procedure_stats DMV,但僅適用於2008 R2及更高版本。對於舊版本,請使用dm_exec_query_stats。這些會給你更好的關於時間,邏輯io,CPU時間和物理IO等的統計信息。