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

Rob*_*Day 12 sql-server performance

我有一个慢速运行的查询,我一直在努力优化.

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

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

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

返回的结果集完全相同.

有人可以说明这两个数字之间的差异到底是什么以及会导致这样的结果?

Rem*_*anu 21

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

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

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

你看到的是查询计划中的更改结果,可能删除了阻塞执行的操作符(很可能是一种排序),新计划使用了一种不同的策略,可以更快地生成第一个结果(可能使用保证请求的索引)订单,所以没有我需要的排序),但整体持续时间更长.

如果你担心客户踌躇不前服务器(它可以发生在大型结果集),那么你应该调查wait_typesys.dm_exec_requests(也来自信息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等待类型累加多长时间.当然,请确保在测试期间服务器上没有其他活动.