在管理工作室中查看客户端统计信息时,服务器回复大约需要等待8秒的时间,客户端处理时间约为1秒.
我一直以为服务器回复的等待时间是要工作的数字,而客户端处理时间一般是带宽或大数据量相关.
我已经对查询进行了一些更改,现在我的服务器回复的等待时间大约是250ms,然而,客户端处理时间已经增加到大约9秒,使总执行时间稍慢.
返回的结果集完全相同.
有人可以看出这两个数字之间究竟有什么区别,什么会导致这样的结果?
解决方法
如果您在服务器回复中运行大量等待时间的查询,则意味着服务器需要很长时间才能生成第一行.对于具有运算符需要整个子查询进行评估(在典型示例是排序运算符)的查询,这是常见的.
另一方面,具有非常小的’服务器回复的等待时间’的查询意味着查询能够快速返回第一行.然而,长的“客户端处理时间”并不一定意味着客户端花费了大量的时间处理,并且服务器被阻塞等待在客户端上.它可以简单地意味着服务器继续从结果返回行,这是在返回最后一行之后花费的时间.
您所看到的是查询计划的更改结果,可能会删除正在阻止执行(最可能是排序)的运算符,并且新计划使用不同的策略来更快地生成第一个结果(可能使用保证请求的索引)订单,所以我不需要),但总体来说更长.
如果您担心客户端阻止服务器(可能会发生在大型结果集上),那么您应该调查执行调查查询的会话的sys.dm_exec_requests
中的wait_type(sys.dm_os_tasks
和sys.dm_os_workers
的信息是否有用).如果我没有错,服务器等待客户端等待类型是ASYNC_NETWORK_IO
.您还可以检查聚合sys.dm_os_wait_stats
,使用DBCC SQLPERF("sys.dm_os_wait_stats",CLEAR)
重新设置,然后运行查询,查看ASYNC_NETWORK_IO等待类型加起来多长时间.当然,确保在测试期间服务器上没有其他活动发生.