我们在 Win2k3 R2 上安装了 SQL Server 2005(64 位标准版)。我们发现 ASYNC_NETWORK_IO 等待次数过多,这似乎会导致数据库不可用,从而减慢或挂起我们面向客户的(动态生成的、依赖于数据库的)网站。
我们相当确定这些等待是由缓慢/未优化的后端应用程序引起的 - MS Access 表单和 ASP 页面,它们发出大量请求以获取大量数据,但无法足够快地使用结果。显然,优化或替换有问题的应用程序和/或将它们分离是有意义的,这样它们就不会不断且低效地打击网站的数据源。我们正在做这些事情,但这非常耗时。
与此同时,我正在寻找一种暂时/短期的缓解方法,然后我遇到了这篇有用的文章,从中我了解到 ASYNC_NETWORK_IO 等待实际上是一个网络缓冲区问题:如果客户端没有足够快地使用数据,SQL Server 的网络缓冲区就会被填满,服务器将变得不可用。
那么:我们能否简单地增加网络缓冲区大小,以便即使不良应用程序运行缓慢,SQL Server 仍然可以供网站使用?
如果是,我们该怎么做?我找不到任何资源来说明如何增加网络缓冲区大小。我不知道这是 NIC 问题、Windows 问题还是 SQL Server 特定问题。(我们的 RAM 或磁盘空间并不短缺,而且愿意投入硬件/资金来解决这个问题。)
如果没有,那么当我们忙于重写所有旧代码时,任何其他短期建议都将不胜感激。
提前致谢 ... !
答案1
是的,async_network_IO 等待通常是应用程序占用大量数据而实际上只需要少量数据的一个症状。网络上的问题在于传输的来回性质。
您提到了 ASP - 如果这是经典的 ASP,它通常会存在循环遍历记录集的开发问题 - 速度很慢。正确的方法是使用 getrows,它将数据一次性传输到应用(Web)服务器上,而不是来回传输。