我有一个MS服务器(巨大的物理机器)和一个应用服务器(VM上的C#工具)。应用程序需要从DB服务器读取大型数据集(具有数百万行和多个GB大小的表)。
当从应用服务器运行select语句时,我在服务器上得到一个ASYNC_NETWORK_IO等待,并且不会超过50-100Mbit网络利用率,尽管它们之间有10 10Gbit行。当我通过正常的Windows文件共享传输一个大文件时,它将达到大约10 10Gbit (因此网络本身是快速的)。
我试图更改驱动程序: OLEDB (v13).And我尝试将网络包大小从非常小的1kb更改为32 1kb。到目前为止还没有进展。
你能给我一些提示吗?我下一步可以试试什么?
更改应用程序或数据传输方式(批量而不是直接查询)不是一个选项。
Server 2012 (11.0.6579) (物理,MS 2012R2,380 R2,10 10GBit)应用服务器(VM,MS 2012 R2,128 R2,10 10Gbit)
发布于 2018-06-12 16:07:18
ASYNC_NETWORK_IO等待几乎从来没有因为一个缓慢的网络!(他们被误导地命名)
它通常是一个客户端应用程序,不能足够快地消耗数据。也就是说,SQL server发送数据的速度超过了应用程序所能使用的速度。
罪魁祸首通常是客户端应用程序,它们逐行处理数据。数据是否被发送到UI?
您提到您的应用服务器在VM上。VM是否在主机上设置了内存预留?
如果在应用服务器上运行SSMS,则可以通过更改SSMS选项“在SSMS”中执行后丢弃结果来测试速度。

SSMS重绘数据的速度可能很慢。使用此选项集,SSMS将从线路上读取所有数据,但不会显示数据。这将使您能够以SQL server可以以的速度运行查询,而不会因客户端应用程序速度而受到影响。
Joe的建议非常古老,但仍然相关:
我想,如果您看到
ASYNC_NETWORK_IO或NETWORKIO等待类型,我会分享关于应该做什么的指导性指导:
另外,如果您正在执行仍然显示NETWORKIO的服务器端数据加载,请检查是否为Server实例启用了共享内存协议(然后检查会话是否通过net_transport =‘共享内存“通过sys.dm_exec_connections连接)。
https://stackoverflow.com/questions/50821493
复制相似问题