我有一个运行缓慢的查询,我一直在努力优化它。
在 Management Studio 中查看客户端统计信息时,服务器回复等待时间约为 8 秒,客户端处理时间约为 1 秒。
我一直认为服务器回复的等待时间是要处理的数字,而客户端处理时间通常与带宽或大数据大小相关。
我对查询进行了一些更改,现在服务器回复的等待时间约为 250 毫秒,但是,客户端处理时间已增加到约 9 秒,使得总执行时间稍微慢一些。
返回的结果集是完全相同的。
有人能解释一下这两个数字之间到底有什么区别以及什么会导致这样的结果吗?
“服务器回复等待时间”是指最后一个请求数据包离开客户端与服务器返回第一个响应数据包之间的时间。 “客户端处理时间”是第一个响应数据包和最后一个响应数据包之间的时间。顺便说一句,我找不到支持这些说法的文件,但我想说,根据我的观察,它们是有效的有根据的猜测。
如果您运行的查询具有较长的“服务器回复等待时间”,则意味着服务器需要很长时间才能生成第一行。这对于具有需要在继续之前评估整个子查询的运算符的查询来说很常见(典型的示例是排序运算符)。
另一方面,“服务器回复等待时间”非常短的查询意味着该查询能够快速返回第一行。然而,较长的“客户端处理时间”并不一定意味着客户端花费了大量时间进行处理并且服务器被阻塞等待客户端。它可能只是意味着服务器继续从结果中返回行,这是返回最后一行所花费的时间。
您看到的是查询计划更改的结果,该更改可能删除了阻止执行的运算符(很可能是排序),并且新计划使用不同的策略,可以更快地生成第一个结果(可能使用保证请求的索引)订单所以我不需要排序),但总体来说持续时间更长。
如果您担心客户端阻碍服务器(这可能发生在大型结果集上),那么您应该调查wait_type
in sys.dm_exec_requests http://msdn.microsoft.com/en-us/library/ms177648.aspx(还有信息来自sys.dm_os_tasks http://msdn.microsoft.com/en-us/library/ms174963.aspx and sys.dm_os_workers http://msdn.microsoft.com/en-us/library/ms178626.aspx对于执行正在调查的查询的会话来说是有用的。如果我没有记错的话,服务器等待客户端等待类型是ASYNC_NETWORK_IO http://msdn.microsoft.com/en-us/library/ms179984.aspx。您还可以查看总计sys.dm_os_wait_stats http://msdn.microsoft.com/en-us/library/ms179984.aspx,使用重置它DBCC SQLPERF("sys.dm_os_wait_stats" , CLEAR) http://msdn.microsoft.com/en-us/library/ms189768.aspx然后运行查询,查看 ASYNC_NETWORK_IO 等待类型总计多长时间。当然,请确保测试期间服务器上没有发生其他活动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)