ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

【等待优化】sql server ASYNC_NETWORK_IO 等待解决思路

2020-04-25 15:00:21  阅读:405  来源: 互联网

标签:NETWORK 应用程序 Server IO SQL ASYNC server 等待


零,ASYNC_NETWORK_IO 的概念

ASYNC_NETWORK_IO  等待类型是DBA经常会遇到的,虽然名称是异步、网络和IO,但是大多数情况下,此等待类型跟任何网络问题均无关系。

数据库系统大量出现ASYNC_NETWORK_IO等待的情况,大致有两类:

  • 会话必须等待客户端应用程序处理从SQL Server接收到的数据,才能向SQL Server发送信号,表明它可以接受新数据进行处理。 这是最常见的情况,可能反映了不良的应用程序设计。
  • 网络带宽已用尽, 以太网阻塞将导致从应用程序来回传输数据的速度变慢,这将降低应用程序的效率,这种情况不常见,可以说是罕见。

一,客户端应用程序的问题 

当SQL Server大量出现ASYNC_NETWORK_IO等待时,最常见的原因是客户端应用程序无法足够快速地处理从SQL Server传回的数据,换句话说,就是SQL Server传递给应用程序的数据量超出了应用程序的处理能力。常见于客户端应用程序请求大量的数据。

当应用程序请求大量的结果数据集时,缓慢的数据处理将导致数据缓冲区被填满,从而阻止SQL Server向客户端发送新的数据。当缓存区被填满时,执行批处理的服务器进程(SPID)将被迫等待,直到客户端应用程序设法开始处理缓冲区中存储的数据,从而允许SQL Server将新的结果集(通过缓冲区)发送给客户端。在等待将应用程序请求的新数据发送到缓冲区以进行进一步处理时,SQL Server会生成ASYNC_NETWORK_IO等待类型。

 

 

二,如何减少ASYNC_NETWORK_IO等待?

在遇到高 ASYNC_NETWORK_IO等待类型时,DBA应该如何减少此等待?

1,发送小数据集

DBA需要调查导致出现ASYNC_NETWORK_IO等待类型的应用程序,并与创建应用程序的开发人员进行协调。

  • DBA需要检查应用程序是否从SQL Server实例请求大数据集,然后在客户端做过滤。
  • 改进的方法只有一个:把过滤放到请求数据时,在SQL Server中执行过滤,向客户端应用程序发送小数据集。

2,使用共享内存

在SQL Server端加载大数据时,也可以通过设置启用共享内存协议(Shared memory protocol )来降低ASYNC_NETWORK_IO等待类型。

SELECT net_transport
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;

在客户端应用中,使用net_transport=’Shared memory’来连接数据库。

3,网络问题

如果检查了以上内容之后,SQL Server的ASYNC_NETWORK_IO等待类型出现的次数并未明显减少,那么可能是网络的问题。

检查SQL Server和客户端之间的网络带宽,网速慢是ASYNC_NETWORK_IO等待值较高的常见原因。 

 

 

参考文档:

Reducing SQL Server ASYNC_NETWORK_IO wait type

转自:http://www.cnblogs.com/ljhdo/

标签:NETWORK,应用程序,Server,IO,SQL,ASYNC,server,等待
来源: https://www.cnblogs.com/gered/p/12773105.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有