我正在使用 PHP 5 和 sqlsrv 数据库驱动程序。我将 QueryTimeout 设置为 15 秒,因为我要反复访问许多不同的服务器,如果我遇到超时,我需要停止操作并访问下一个服务器。
目前我只是使用一个变量来跟踪开始时间和结束时间,如果它是>=我的 QueryTimeout 则中止,但是有没有办法从 sqlsrv 驱动程序本身获取实际查询时间?我没有在sqlsrv 函数列表中看到任何看起来有帮助的东西。我希望能够获得最后一次查询的时间,而不是将每个查询包装在获取当前时间的变量中。
我正在使用 PHP 5 和 sqlsrv 数据库驱动程序。我将 QueryTimeout 设置为 15 秒,因为我要反复访问许多不同的服务器,如果我遇到超时,我需要停止操作并访问下一个服务器。
目前我只是使用一个变量来跟踪开始时间和结束时间,如果它是>=我的 QueryTimeout 则中止,但是有没有办法从 sqlsrv 驱动程序本身获取实际查询时间?我没有在sqlsrv 函数列表中看到任何看起来有帮助的东西。我希望能够获得最后一次查询的时间,而不是将每个查询包装在获取当前时间的变量中。
因为我不熟悉 SQL Server、T-SQLsqlsrv等,所以只是在黑暗中拍摄。
http://msdn.microsoft.com/en-us/library/ms189741.aspx
好像可以SELECT last_elapsed_time FROM sys.dm_exec_query_stats
你可以使用这个:
DECLARE @start_time DATETIME, @end_time DATETIME
SET @start_time = CURRENT_TIMESTAMP
sql code here
SET @end_time = CURRENT_TIMESTAMP
SELECT DATEDIFF(ms, @start_time, @end_time)
将其放在查询的开头:
SET STATISTICS TIME ON
当您查看输出结果时,它们将包括时序统计信息。例如
SQL Server Execution Times:
CPU time = 47 ms, elapsed time = 109 ms.
编辑:您必须将 sqlsrv 设置为不使用此命令将警告作为错误返回:
sqlsrv_configure('WarningsReturnAsErrors', false);
在 sqlsrv_errors() 中返回统计信息文本