【问题标题】:MS SQL Server slow network performance (ASYNC_NETWORK_IO) with fast network 10Gbit [closed]MS SQL Server 慢速网络性能(ASYNC_NETWORK_IO)与快速网络 10Gbit [关闭]
【发布时间】:2018-06-12 16:04:46
【问题描述】:

我有一个 MS SQL DB 服务器(巨大的物理机器)和一个应用程序服务器(VM 上的 C# 工具)。应用程序需要从数据库服务器读取大型数据集(具有数百万行和数 GB 大小的表)。

当从应用服务器运行 select 语句时,我会在服务器上等待 ASYNC_NETWORK_IO,并且网络利用率不超过 50-100Mbit,尽管它们之间有 10Gbit 的线路。当我通过普通的 Windows 文件共享传输一个大文件时,它达到大约 10Gbit(因此网络速度很快)。

我尝试更改驱动程序:OLEDB vs ODBC (v13)。我尝试将网络包大小从非常小的 1kb 更改为 32kb。 到目前为止还没有改进它的运气。

你能给我一些提示吗?我接下来可以尝试什么?

不能更改应用程序或数据传输方式(批量而不是直接查询)。

SQL Server 2012 (11.0.6579)(物理,MS 2012R2,380GB RAM,10GBit) 应用服务器(VM,MS 2012 R2,128GB 内存,10Gbit)

【问题讨论】:

  • 您可以使用bcp 测试将数据传输到同一服务器的速度。这将排除任何与网络相关的内容。
  • 也许客户端是 CPU 密集型消耗的结果。

标签: sql-server performance networking sql-server-2012


【解决方案1】:

ASYNC_NETWORK_IO 等待几乎从来不是因为网络慢! (他们被误导了)

通常是客户端应用无法足够快地消耗数据。即 SQL 服务器发送数据的速度比您的应用程序消耗的速度快。

罪魁祸首通常是逐行处理数据的客户端应用。数据是否正在发送到 UI?

您提到您的应用服务器位于虚拟机上。 VM 是否在主机上设置了内存预留?

如果您在应用服务器上运行 SSMS,您可以通过更改 SSMS 选项“在 SSMS 中执行后丢弃结果”来测试速度

SSMS 重绘数据可能会很慢。设置此选项后,SSMS 将从网络中读取所有数据,但不会向您显示数据。这将使您能够以 SQL Server 可以运行的速度运行查询,而不会受到客户端应用程序速度的影响。

Joe Sack 的 advice 已经很老了,但仍然很重要:

我想我会分享有关如果您看到该做什么的说明性指导 ASYNC_NETWORK_IONETWORKIO 等待类型:

  • 识别大型结果集,并与应用程序团队(或开发人员)核实这些结果集是如何使用的。危险信号包括 应用程序查询大型结果集但不处理超过 一次几行

  • 确保客户端应用程序处理它请求的所有行。如果不是所有行都需要或使用 - 只考虑 查询需要的行(例如TOP X)

  • 查看服务器上的 NIC 配置,确保没有问题(物理卡问题、自动检测没有选择最快 速度)

  • 验证应用程序/客户端和 SQL Server 实例(例如路由器)之间的网络组件

附带说明 - 如果您正在执行服务器端数据加载, 仍然显示 NETWORKIO,检查是否共享内存协议 为 SQL Server 实例启用(然后检查是否会话 使用 net_transport = ‘Shared memory’ 通过 sys.dm_exec_connections)。

【讨论】:

  • 谢谢!你让我走上正轨。我知道这个选项存在,但我被网络利用率分心了。无论如何,我需要联系供应商并找出他们在应用程序中处理行的速度不够快的原因。
  • 乐于助人!
猜你喜欢
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多