2009-12-01 116 views
12

我有一个运行缓慢的查询,我一直在优化。SQL Server - Management Studio - 客户端统计信息 - 等待服务器响应时间和客户端处理时间

在Management Studio中查看客户端统计信息时,服务器应答等待时间大约为8秒,客户端处理时间大约为1秒。

我一直认为服务器回复上的等待时间是要处理的数量,而客户端处理时间通常是带宽或与数据大小有关。

我已经对查询进行了一些更改,现在我在服务器回复上的等待时间大约为250毫秒,但是,客户端处理时间增加到约9秒,总执行时间稍微慢一些。

返回的结果集完全相同。

有人可以澄清这两个数字之间的区别究竟是什么以及会导致这样的结果吗?

+0

您试图执行的查询是什么? – 2009-12-01 17:56:29

+0

经过进一步调查后,问题将在查询中加入到表值UDF中。这导致SOS_SCHEDULER_YIELD 等待查询的每一行。该表的参数是固定的,所以我只是用它填充一个临时表并加入到该表中。这两个答案帮助我,所以选择一个接受是艰难的。我会把它交给Remus,因为他确认了我对我两次看到的想法,并且给出了确切的命令以获得等待。 – 2009-12-02 12:51:59

回答

19

“等待时间对服务器回复”是最后的请求分组之间的时间离开所述客户端和所述的第一个响应数据包从返回服务器。 '客户端处理时间'是第一个响应数据包和最后一个响应数据包之间的时间。顺便说一句,我找不到支持这些说法的文档,但我会说,根据我的观察,他们是有效的教育猜测。

如果您运行一个查询,并在服务器应答中等待一段时间,这意味着服务器花费很长时间才能生成第一行。对于那些需要整个子查询在运行前进行求值的运算符(典型的例子是排序运算符),查询通常是这样的。

另一方面,具有非常小的'服务器回复等待时间'的查询意味着查询能够快速返回第一行。然而,长时间的“客户端处理时间”并不一定意味着客户端花费了大量时间处理,并且服务器被阻止在客户端等待。它可以简单地表示服务器继续从结果中返回行,这是直到最后一行返回需要多长时间。

您看到的是查询计划中可能移除阻止执行的操作符(最可能是排序)的更改的结果,并且新计划使用不同的策略来更快地生成第一个结果(可能使用索引保证所要求的订单,所以我不需要),但整体持续时间更长。

如果你担心客户踌躇不前服务器(它可以发生在大型结果集),那么你应该调查sys.dm_exec_requestswait_type(也sys.dm_os_taskssys.dm_os_workers信息是有用的),用于执行下调查的查询会话。如果我没有弄错,等待客户端等待类型的服务器是ASYNC_NETWORK_IO。您也可以检查聚合sys.dm_os_wait_stats,使用DBCC SQLPERF("sys.dm_os_wait_stats" , CLEAR)重置它,然后运行查询,查看ASYNC_NETWORK_IO等待类型累计了多长时间。当然,在测试期间确保服务器上没有其他活动发生。

+0

这就是我认为他们的意义。关键是,这两个查询仍然具有相同的外部排序顺序,并对此类进行更改,以包含未进行索引的列仍会导致相同的输出。我会看看一些等待类型和网络io的东西。谢谢。我仍在制作一个测试工具来展示所有这些。希望它会更有意义。 – 2009-12-02 08:11:03

4

好的,我发现了一些与此主题有关的文章。我希望他们可能会有帮助。我必须说,这为我打开了关于查询性能调整的所有新门。

SQL Server Wait Events: Taking the Guesswork out of Performance Profiling

Analysing Query Performance in SQL Server 2005

Display SQL Server database waits

INF: Client Effects on SQL Server Throughput

+1

感谢这些,我会读一读。我无法发布我一直在运行的查询。它非常大,没有很多背景就不会产生很多感觉。我正在研究一个简单的测试工具,可以产生相同的结果。我会尽快发布。 – 2009-12-01 18:34:14

2
+0

断开的链接。尝试http://msdn.microsoft.com/en-us/library/aa216969(v=SQL.80).aspx或http://technet.microsoft.com/en-us/library/aa216969(v=sql。 80).aspx或搜索“查询窗口统计窗格” – 2012-11-07 19:43:07

相关问题