最近在项目中,遇到SQL Server数据库卡顿,在数据库中发现了大量的ASYNC_NETWORK_IO等待,而且出现这种等待的语句都是大的SELECT查询。开始我以为数据库遇到了瓶颈,毕竟此项目非常巨大,实时数据请求非常高。
直到网络工程师发现了网络延迟,我才意识到这个阻塞的原因。从字面意思,我们知道,这个是异步网络IO等待,在这个案例中,数据库已经把客户端请求的数据准备好,但是在发送给客户端的时候,由于网络延迟,造成这些数据无法发送出去,当大量的客户端一起发送此类请求后,更加造成了网络拥堵,从而引起大量的客户端卡顿。
当网络恢复正常后,此类阻塞也随之消失,虽然此处的ASYNC_NETWORK_IO等待是由于网络延迟造成的,通过此事故,我们设计程序的时候也要谨慎起来,尽量避免不必要的数据返回,只返回有用的数据就可以了,并不是数据库服务器配置高了就能应付庞大的客户端请求了,在没有高速网络的前提下,同样会造成性能问题,毕竟数据库只是处理数据,把数据从服务端传输到客户端还是需要网络来处理的。
领取专属 10元无门槛券
私享最新 技术干货