我有一些程序没有优化。我想分析一下这些程序是否得到优化,因为只有大量数据才能检查。如何跟踪过程执行时间?
我想把一个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