我有一个网络流量问题,可能会得到很多答案。在工作中,我通过 VPN 连接到客户的内部网络,他们在那里有他们的阶段 SQL 数据库。每次我进行阶段开发(修复/增强)时,我都喜欢进行一轮快速 QA。当我在 SQL Server Management Studio 中运行 SQL 查询时,速度似乎并不慢。但是,当我使用我的本地构建运行带有阶段版本的 web.config 的 Web 应用程序时,与使用我们公司的开发 SQL 数据库 web.config 文件相比,延迟非常慢。
为了便于比较,我开始对某个特定页面进行 1-1000、2-1000 等计数。使用我们的 dev web.config 加载页面需要 1.5 秒。但是当使用 stage web.config 时,我计算的时间略长于 8 秒。我开始将应用程序模块移至使用 AJAX,因此我看到这些页面有所改进,但页面仍然需要加载。因此,如果我发布大量更新包,这确实会减慢我的测试速度。
如果您能推荐一些诊断这种缓慢/滞后现象的工具,那正是我感兴趣的。另外,如果您能描述如何排除故障,那正是我所寻找的。我是一名 .NET 应用程序开发人员,而不是网络管理员,所以我不知道从哪里开始。
================================================
上述澄清(2011 年 5 月 23 日更新):
================================================
显然,SQL Server Management Studio 也很慢,所以肯定是网络上的 SQL 连接出了问题。当我通过 VPN 连接到 *.234 Windows Server 2008 机箱所在的网络时,我在本地机箱上快速 ping 了一下。然后,我从与 *.235 位于同一网络上的另一台机器上又 ping 了一下。所以也许这个问题没有答案。他们使用的是 T1 线路,所以这可能是问题所在。这些 ping 的时间差别很大。
在不同机器上的远程桌面上,但不同的网络机器上。从与 *.234 盒相同的网络进行 Ping:
C:\用户\管理员>ping 192.168.2.234
使用 32 字节数据对 192.168.2.234 进行 ping 操作:
来自 192.168.2.234 的回复:字节=32时间<1msTTL=128
来自 192.168.2.234 的回复:字节=32时间<1msTTL=128
来自 192.168.2.234 的回复:字节=32时间<1msTTL=128
来自 192.168.2.234 的回复:字节=32时间<1msTTL=128
192.168.2.234 的 Ping 统计信息:数据包:已发送 = 4,已接收 = 4,丢失 = 0(丢失率为 0%),以毫秒为单位的近似往返时间:最短 = 0 毫秒,最长 = 0 毫秒,平均 = 0 毫秒
C:\用户\管理员>
在本地机器上,当 VPN 连接到机器时,我正在 ping。从不同的网络(如 *.234 盒)进行 ping。
C:\Windows\system32>ping 192.168.2.234
使用 32 字节数据对 192.168.2.234 进行 ping 操作:
来自 192.168.2.234 的回复:字节=32时间=856毫秒TTL=127
来自 192.168.2.234 的回复:字节=32时间=717毫秒TTL=127
来自 192.168.2.234 的回复:字节=32时间=561毫秒TTL=127
来自 192.168.2.234 的回复:字节=32时间=708毫秒TTL=127
192.168.2.234 的 Ping 统计信息:数据包:已发送 = 4,已接收 = 4,丢失 = 0(丢失率为 0%),以毫秒为单位的近似往返时间:最短 = 561 毫秒,最长 = 856 毫秒,平均 = 710 毫秒
C:\Windows\system32>
答案1
当您使用远程桌面时,只有屏幕更新会发送到您的 PC,因此通过 VPN 的流量很少。在这种情况下,您从远程桌面到 SQL Server 进行的数据库调用实际上发生在 VPN 另一端的本地网络上。您的机器只会获取远程桌面屏幕更改。
当您通过本地浏览器访问该网站时,您将通过 VPN 提取整个结果集,这比您的远程桌面会话的数据要多得多(远程桌面非常高效,运行速度大约为 2-10kbps,具体取决于您的设置)。
在这种情况下,加快速度的唯一方法是:
- 获得更快的连接以便 VPN 更快(或不需要 VPN 的直接连接)。
- 创建 Web 服务器/数据库的本地副本并针对该系统运行。
- 尝试优化您的查询,以便您通过 VPN 提取尽可能少的数据。
这都是带宽问题。除非您愿意投入大量资金来建立您与远程主机之间的快速网络连接,否则您将很难达到局域网所能达到的速度。
答案2
当您在 SQL Management Studio 中运行查询时,您正在执行一次往返。您只会体验到一次网络延迟增加(例如,~500ms)。
在您的应用程序中,您可能会执行许多查询;每个查询都经历相同的串行延迟。因此,如果您的应用程序执行 10 个查询(或者可能正在进行某种形式的主从查询),您很快就会在响应时间上多花费很多秒。
答案3
这是关于执行许多查询的很好的信息,但是让我给你多一点信息?我对此仍然有点困惑。我昨天发现了一些非常有趣的事情,而且非常简单。忘记 web.configs 的场景。当我执行远程桌面并访问远程桌面中的 URL(该网络上托管应用程序和 SQL 服务器的计算机)时,每次页面加载都非常快(<1ms)。但是当我通过本地计算机上的 Web 浏览器连接时,速度非常慢(500+ms)。在这两种情况下我都使用了 VPN。我解决问题的方法是使用远程桌面。在这个新场景中,我将 Web 应用程序托管在远程访问网络上的远程服务器上。这是一个简单的问题。为什么远程桌面这么快?一定有一种方法可以在我的本地机器上模拟它。为什么进行远程桌面连接(本地)并在本地打开 Web 浏览器与在本地机器上查看站点有什么不同??
顺便提一下我的第一个场景...我还发现注册表设置“MaxPacketSize”将 ms 减少了一半。但速度仍然很慢。
http://support.microsoft.com/default.aspx?scid=kb;en-us;244474#LetMeFixItMyselfAlways