代码之家  ›  专栏  ›  技术社区  ›  Robin Day

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

  •  12
  • Robin Day  · 技术社区  · 14 年前

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

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

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

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

    返回的结果集完全相同。

    有人能解释一下这两个数字到底有什么区别吗?什么会导致这样的结果?

    2 回复  |  直到 11 年前
        1
  •  21
  •   Remus Rusanu    14 年前

    'wait time on server replices'是最后一个离开客户端的请求数据包与从服务器返回的第一个响应数据包之间的时间。'客户端处理时间'是第一个响应数据包和最后一个响应数据包之间的时间。顺便说一句,我找不到支持这些说法的文件,但我会说,根据我的观察,他们是有根据的猜测。

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

    另一方面,“服务器应答等待时间很短”的查询意味着查询能够快速返回第一行。然而,“客户机处理时间”很长并不一定意味着客户机花费了大量的时间进行处理,并且服务器在等待客户机时被阻塞。这可能仅仅意味着服务器继续返回结果中的行,这就是返回最后一行所花费的时间。

    您看到的是查询计划中更改的结果,该更改可能删除了一个阻止执行的运算符(最可能是一个排序),而新计划使用了一种不同的策略,该策略更快地生成第一个结果(可能使用了一个保证所请求的顺序的索引,因此不需要排序),但总体上持续时间更长。

    如果您担心客户机阻止服务器(这可能发生在大型结果集上),那么应该调查 wait_type 在里面 sys.dm_exec_requests (也来自于信息 sys.dm_os_tasks sys.dm_os_workers 对执行正在调查的查询的会话有用。如果我没有错的话,等待客户机的服务器等待类型是 ASYNC_NETWORK_IO . 你也可以检查总数 sys.dm_os_wait_stats ,使用重置 DBCC SQLPERF("sys.dm_os_wait_stats" , CLEAR) 然后运行查询,查看异步网络IO等待类型加起来的时间。当然,确保在测试期间服务器上没有其他活动。

        2
  •  4
  •   Adriaan Stander    14 年前

    好的,我找到了一些关于这个主题的文章。我希望他们能帮上忙。我必须说,这为我打开了关于查询性能调优的所有新的门。

    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