如何在不输出数据的情况下测试 Sql Server Mgmt Studio 的性能?
-
11-09-2019 - |
题
使用 SQL Server Management Studio。
如何测试大型选择(例如 600k 行)的性能而不让结果窗口影响我的测试?在所有条件相同的情况下,这并不重要,因为两个查询都将输出到同一个地方。但我想加快我的测试周期,并且我认为 SQL Server Management Studio 的输出设置妨碍了我。我目前正在使用输出到文本,但我希望有更好的选择。
我认为这会影响我的数字,因为数据库位于我的本地机器上。
编辑:有一个关于在这里执行 WHERE 1=0 的问题(认为会发生连接但没有输出),但我测试了它,但它不起作用——不是查询性能的有效指标。
解决方案
您可以查询之前做SET ROWCOUNT 1
。我不知道这正是你想要什么,但它会避免等待大量数据要返回,因此给你准确的计算成本。
不过,如果你添加客户端统计到您的查询时,所述号码中的一个是等待时间对服务器的应答,这将给你的服务器计算时间不包括需要通过网络将数据传输的时间。
其他提示
您可以 SET STATISTICS TIME ON 获得的测量时间在服务器上。你也可以使用Query / 包括客户端统计(Shift + Alt键+ S)在SSMS获取有关客户端时使用的详细信息。需要注意的是SQL查询不运行,并在完成后的结果返回给客户端,而是他们跑的为的他们返回结果,如果通信信道是全面甚至暂停执行。
在其下一个查询完全忽略发送结果数据包返回给客户端的唯一上下文激活。但随后的时间返回,当你衡量广告效果的输出到客户端也应考虑。你确定你自己的客户端会比任何SSMS快?
SET ROWCOUNT 1
将在返回第一行后停止处理,这意味着除非计划碰巧有阻塞运算符,否则结果将毫无用处。
举一个简单的例子
SELECT * FROM TableX
实际上,此查询的成本在很大程度上取决于中的行数 TableX
.
使用 SET ROWCOUNT 1
不会显示任何内容。无论是否 TableX
有 1 行或 10 亿行,它将在返回第一行后停止执行。
我经常分配 SELECT
结果到变量,以便能够查看逻辑读取等内容,而不会因 SSMS 显示结果而减慢速度。
SET STATISTICS IO ON
DECLARE @name nvarchar(35),
@type nchar(3)
SELECT @name = name,
@type = type
FROM master..spt_values
有一个相关的连接项目请求 在 SSMS 和/或 TSQL 中提供“在服务器上丢弃结果”选项
你怎么能如果不这样做的结果输出测试您的查询的表现呢?加速测试是没有意义的,如果测试不告诉你查询的方式去进行任何东西。你真的要找出这个狗查询的需要十分钟你推督促后返回的数据?
,当然它要花费一段时间才能恢复60万分的记录。它会在你的用户界面,以及,它可能会需要更长的时间比在查询窗口,因为信息已经通过网络去。
你能做的最好的事情是检查查询执行计划(按<大骨节病>控制骨节病> + <大骨节病>→骨节病>)的实际查询。这会给你最好的瞎猜可用的性能。
我认为,在条款 WHERE 1=0
肯定是发生在SQL服务器上面,而不管理工作室。没有任何结果将会返回。
是你的数据库引擎在同一台机器上,你正在运行的管理工作室吗?
你可以:
- 输出的文本或
- 输出的文件。
- 附近的查询结果格中。
这会只是移动的周期,花在绘制网管理工作室。也许Resuls文本将更为高效的在整体。躲在窗将节省的周期管理上的工作室具有绘制的数据。它仍然是返回的管理工作室,所以它真的不是节省了大量的循环。