同一物理机(两个虚拟机)上的 IIS 和 SQL 之间的延迟

同一物理机(两个虚拟机)上的 IIS 和 SQL 之间的延迟

我有一台服务器(2x4 核 CPU,32GB 内存),它是 Windows Server 2012 Hyper V 主机,它托管两个客户虚拟机(也是 Windows Server 2012 实例)。其中一个是 Web 服务器,另一个是 SQL 服务器。

当访问循环超过 50 条记录的页面时,延迟很明显。我捕获/报告了循环中每次迭代的时间,每次迭代大约需要 20-30 毫秒。当然,这相当于整个循环的延迟超过一秒。

我认为可能需要调整 SQL,但在其上运行分析器时,查询显示持续时间几乎为 0,因此似乎瓶颈是在两个虚拟机之间的传输中。

我已将两个虚拟机配置为使用实际 NIC(而不是使用 VNIC),所以这也许是我的问题的一部分。

此外,这是一个经典的 ASP 站点,因此它使用 SQL OLE DB 提供程序,我想知道这是否是问题的一部分。

这是一个新的服务器设置,来自现有的 Windows 2003/IIS6 服务器设置,其中 Web 和 DB 都在同一服务器实例上运行(无虚拟化)。在该设置中,像这样循环遍历游标时不会出现这样的延迟。但有太多变量,我不确定从哪里开始排除。

答案1

就我而言,这是虚惊一场。我以为延迟是新 Hyper-V 设置所特有的,但实际上实时服务器上也出现了这种情况。这是由于我们最近对代码进行了更改,而实时服务器上尚未发现该问题。

答案2

同一网络中两台虚拟机出现这种延迟的原因在于所有相同的网络仍然适用。您不想循环遍历每条记录并将其发送到 SQL Server,而是一次性将整个记录集下载到 Web 服务器,然后一次性处理所有内容。

相关内容