我正在使用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执行时间) - 客户端处理时间(客户端统计信息)
也许这是一个选择?
答案 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等待缓冲区清除的任何时间。简而言之,它确实非常独立于客户。