您以前见过这种等待类型,不是吗?嗯,这肯定是一种等待类型,导致了很多混乱。直接关注的焦点通常是“网络”这个词,但更多时候它与网络无关!
ASYNC_NETWORK_IO 等待类型通常会产生两种类型的症状,第一种是会话工作负载正在等待相应的客户端应用程序确认/处理给定的数据集,并让 SQL Server 知道它已准备好处理/确认更多数据。第二个症状是应用程序和数据库实例之间的网络可能存在性能问题。在幕后,SQL Server 将数据保存在输出缓冲区中,直到收到客户端的确认,确定数据的消耗是否已完成。完全的。ASYNC_NETWORK_IO 是一个明显的迹象,表明应用程序在从后端数据库读取所需数据时缺乏效率。底层网络也可能存在问题,在处理数据和信号从客户端发送回服务器时可能会产生更长的等待时间。
导致此等待的可能原因包括:
- 应用程序代码无法正确检索数据
- 客户要求的大数据集
- 客户端或应用程序端发生的数据过度过滤
- 配置不当的网络设备,例如网卡、交换机等。
在较高的层面上,DBA 可能想要检查以下事项:
- 检查应用程序代码并确保应用程序正确/有效地读取数据。例如,您的应用程序是否会拉回大量行以一次处理一行?
- 在客户端/应用程序端进行不必要的数据过滤?限制行数。
- 如果检查了上述项目,但 ASYNC_NETWORK_IO 问题仍然存在,则可能是由于网络造成的。您可以查看以下一些内容:
检查应用程序和后端数据库实例之间的网络通信链路并验证带宽。
- 使用 sys.dm_io_virtual_file_stats 测试网络因负载或距离而产生的一般延迟
- 检查数据库服务器上的 NIC 配置以确保没有错误和/或设置丢失。
ASYNC_NETWORK_IO WAIT TYPE 可能确实是与网络相关的问题,但通常可能是由于客户端应用程序未有效处理其数据造成的。如果确实是后者,那么这对于 DBAS 和开发人员来说是一个共同努力的机会,以了解应用程序真正需要什么,以实现后端数据库性能的最佳利益。确保大多数数据过滤在 SQL Server 内完成是最佳实践,可以通过视图或更具体的事务语法中的 where 条件来实现。
尽管有很多方法可以通过使用 SQL Server 中的编目 DMV 和扩展事件来监视和测量 ASYNC_NETWORK_IO 等待,但我们鼓励 SQL Server DBA 社区查看 Quest 的 Spotlight Cloud,它可以有效地确定等待类型的根本原因历史时期的消费。
原因
在请求等待网络 I/O 完成时累积。这种等待类型的常见原因是客户端应用程序处理数据的速度无法达到 SQL Server 提供的速度。发生这种情况时,SQL Server 必须等待客户端准备就绪。其他原因包括网络瓶颈和通过网络发送大量数据
调用应用程序处理结果的速度不够快 - 这种等待的最常见原因是应用程序服务器资源不足,例如 CPU 达到 100%。其他原因可能是应用程序读取数据,然后执行其他处理,例如读取一行、运行另一个进程,这需要几秒钟或几分钟的时间。
网络硬件问题 - 这很少是原因,但请检查计数器,例如每秒批量请求数(100MB 网卡的值超过 3000 表示过多)和网络接口:当前带宽(值超过 0.6 表示过多)。
建议的解决方案
- 通过仅选择所需的行和列来减少通过网络发送的数据量
- 确保连接字符串中的网络数据包大小具有适当的大小。如果实例正在执行批量加载,请尝试增加数据包大小以查看这是否会提高吞吐量。
- 添加额外或升级网络接口
- 删除任何使用网络接口的其他应用程序
文章评论