2012-07-11 63 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等的统计信息。