我收到了一张来自 SolarWinds 的图表,其中显示了按天细分的顶级等待事件。在过去的 2 天里,每日颜色编码条的一部分代表 ASYNC_NETWORK_IO 总共 3 小时。仍在尝试查看我是否可以访问 Solar Winds 面板以尝试查看它是否可以深入了解图表。
在过去的 2 个小时里,我一直在搜索谷歌、网站和文档,但几乎没有发现任何结果告诉我如何深入研究这 3 个小时。
它是一个大块吗,是不是一天中的几分钟,它是否与任何特定的高 I/O 活动窗口(数据仓库刷新或其他东西)相匹配。
我所拥有的只是“在这里,昨天和前一天总共等待了 3 个小时,现在告诉我为什么” - 我必须承认我真的不知道如何进一步深入研究。
我读过各种关于“嗯,它通常是一个设计不佳的应用程序”或类似内容的文章。
有趣的是这是最后 7 天的,前 5 天都清楚。没有这种等待的迹象。突然有一大块。我需要知道如何挖掘更多。
据我所知,没有用户抱怨系统性能。
有DMV或什么可以帮助吗?
任何人都可以给我一些指示?
谢谢
ASYNC_NETWORK_IO
从来都不是服务器端的问题。此等待表示 SQL Server 有结果要发送到客户端,但正在等待客户端使用结果以便完成发送。
慢速网络有可能(尽管不太可能)是瓶颈。这几乎从来都不是原因,除非有人使用拨号质量网络连接。这里的修复是更快的网络连接。(但这不是你的问题。)
由于糟糕的设计,应用程序也有可能明确停止对结果的消耗。如果应用程序接受要显示的前 25 行,然后停止接受结果,迫使服务器等待......并且只有在用户点击“下一页”按钮时才获取接下来的 25 行,就会发生这种情况。在这种情况下,您需要将应用程序更改为一次使用整个结果集,然后仅在显示中处理分页,或者将应用程序更改为仅请求一页结果并暂时进行往返6 每次用户点击“下一页”。
最后,它可能是功能不足的客户端计算机,或者是性能不佳的应用程序。SSMS 是性能不佳的应用程序之一。如果你这样做,
SELECT * FROM dbo.HugeTrillionRowTable
你会看到ASYNC_NETWORK_IO
等待你的会话堆积。这里的正确修复取决于细节。您可能需要向客户端计算机添加更多内存,或横向扩展至更多客户端容器,或在应用程序中更改代码(这是 SSMS 的修复方法,但不是微不足道的更改)。在您的情况下,如果您可以获得对 SolarWinds DPA 的只读访问权限,您将能够深入了解该等待以确定查询、客户端等以了解这些详细信息。如果您无法访问 DPA,则可以 monitor
sys.dm_exec_session_wait_stats
,尽管这只会显示当前正在运行的查询的信息,因此您需要在行为中捕获违规代码。事后没有“时间机器”DMV可以回去。当用户在 Excel 打开的情况下锁定计算机并在此处回答https://dba.stackexchange.com/a/181886/35450时,您可以看到我的问题High ASYNC_NETWORK_IO 。
很难深入挖掘,因为正如@AMtwo 所暗示的,这不一定是服务器问题。(我不同意这绝不是服务器问题,因为拥塞可以备份到服务器并导致服务器上的网络 IO 缓冲区变得饱和,这可能导致我的帖子详细介绍的问题。)