SQL Server - Management Studio - 客户端统计信息 - 服务器回复的等待时间与客户端处理时间的关系

时间:2009-12-01 17:34:26

标签: sql-server performance

我的查询速度很慢,我一直在优化。

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

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

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

返回的结果集完全相同。

有人能否清楚说明这两个数字之间的差异究竟是什么以及会导致这样的结果?

2 个答案:

答案 0 :(得分:21)

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

如果您在服务器回复上运行大量“等待时间”的查询,则意味着服务器花费很长时间来生成第一行。这通常适用于具有运算符的查询,这些运算符在进行之前需要对整个子查询进行求值(典型示例是排序运算符)。

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

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

如果您担心客户端阻止服务器(可能会在大型结果集上发生),那么您应该调查sys.dm_exec_requests中的wait_type(同样来自sys.dm_os_tasks的信息和{ {3}}对于执行调查中的查询的会话非常有用。如果我没有弄错,等待客户端等待类型的服务器是sys.dm_os_workers。您还可以检查汇总ASYNC_NETWORK_IO,使用sys.dm_os_wait_stats重置它,然后运行查询,查看ASYNC_NETWORK_IO等待类型的累加时间。当然,请确保在测试期间服务器上没有其他活动。

答案 1 :(得分: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