了解Sql Server执行时间

时间:2014-01-28 22:52:34

标签: sql sql-server sql-server-2012

我正在使用SQL Server 2012和SET STATISTICS TIME ON来测量我的sql语句的CPU时间。我使用它是因为我只想获得数据库执行语句所需的时间。

当从返回大数据的select,我注意到CPU时间上升相当高,例如使用TOP 2000将需要大约400毫秒,但是没有它会需要大约10000ms CPU时间。

我不确定的是: 返回的CPU时间是否可能包含显示Sql Server Management Studio中返回的数百万行所需的时间?那将是一个非常糟糕的情况。

更新

我想要接收的时间是sql server的执行时间,没有ssms显示行所需的时间。 Client statistics中有几个时间统计信息显示,但在搜索了很长时间之后,很难找到解释它们是什么的好参考。有什么建议吗?

构思:已用时间(sql server执行时间) - 客户端处理时间(客户端统计信息)

也许这是一个选择?

2 个答案:

答案 0 :(得分:1)

在多线程世界中,CPU时间对简单调优的帮助越来越小。执行时间值得关注。

要查看是否包含了显示结果所花费的执行时间(已用时间),您可以SELECT TOP 2000 * INTO #temp来比较执行时间。

更新

我的快速测试表明,创建/插入#temp表的开销超过了显示结果的开销(在5000)。当我转到50,000个结果时,SELECT INTO运行得更快。两者变为等效的计数取决于返回的字段数量和类型。我测试了:

SET STATISTICS TIME ON
SELECT TOP 50000 NEWID()
FROM  master..spt_values v1, master..spt_values v2
WHERE v1.number > 100
SET STATISTICS TIME OFF
-- CPU time = 32 ms,  elapsed time = 121 ms.


SET STATISTICS TIME ON
SELECT TOP 50000 NEWID() col1
INTO #test
FROM  master..spt_values v1, master..spt_values v2
WHERE v1.number > 100
SET STATISTICS TIME OFF
-- CPU time = 15 ms,  elapsed time = 87 ms.

答案 1 :(得分:1)

SET STATISTICS TIME ON中的CPU时间仅计算SQL Server执行查询所需的时间。它不包括客户端呈现结果所需的任何时间。它还排除SQL Server等待缓冲区清除的任何时间。简而言之,它确实非常独立于客户。