是否需要担心ASYNC_NETWORK_IO等待类型?


16

在查看需要花费很长时间才能执行的存储过程的列表时,最引人注目的是它。但是,大多数等待时间(81%)是ASYNC_NETWORK_IO,我知道原因:存储过程传输大约400 MB的信息。

在文档中,它指出ASYNC_NETWORK_IO的原因是客户端无法跟上大量数据的流传,这可能是事实。我不确定如何使客户端保持同步,因为它所做的只是通过ADO.NET调用存储过程,然后仅处理数据集。

因此,鉴于此信息,我是否应该担心此过程的ASYNC_NETWORK_IO等待类型?它实际上对服务器性能有影响吗?

其他信息:

  • 我正在使用SQL Server 2005的Service Pack 2。
  • 客户端应用程序与SQL Server位于同一盒子上(我知道,我知道...但是我对此无能为力)。

1
考虑这种等待的最佳方法是查询中没有任何东西引起等待-它正在将数据返回给客户端。您还将在Access中看到很多链接表。根据您的客户端应用程序,一种可能性是将数据分成较小的块,或者仅返回较少的数据。如果这不是一个选择,那么您可能会受到限制,只能减少操作量。
JNK 2014年

客户端应用程序是否使用共享内存或TCP / IP连接?客户端应用程序和SQL Server是否共享同一组处理器核心,或者您是否使用亲和力屏蔽技术将它们分开?
乔恩·塞格尔

这是默认的连接类型-没什么特别的-因此它使用的是共享内存。这两个应用程序使用相同的内核集-没有亲和力。
AngryHacker 2014年

您的存储是SAN还是本地?
埃里克·希金斯

@EricHiggins只是一组本地RAID硬盘驱动器。
AngryHacker 2014年

Answers:


14

如您所说,这种等待类型表明应用程序无法跟上SQL Server的速度。现在真正的意思是,SQL Server无法通过网络发送数据。

可能有两个根本原因:

  1. 该应用程序编写效率低下,并且无法足够快地处理行。
  2. 网络已用尽。

如果应用程序本身太慢,则不会对其他查询的性能产生影响。另一方面,如果管道太小,则其他查询也无法发送其结果,而必须等待。

但是,在后一种情况下,所有连接都将在ASYNC_NETWORK_IO上等待。您应该能够清楚地看到这种影响。


对于要点1。数据检索是使用标准代码通过ADO.NET完成的: var dataSet = new DataSet(); var da = new SqlDataAdapter(command); da.Fill(dataSet); 因此,我不确定到底什么会很慢。
AngryHacker 2014年

对于项目要点2。应用程序与SQL位于同一框上,并且通过“共享内存”方法进行连接。因此,从理论上讲,这应该超级快。
AngryHacker 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.