一个“更快”的服务器比另一个慢

J1m*_*mmy 1 performance sql-server optimization sql-server-2016 query-performance

我有 2 个虚拟机:

  • VM1 - 8 核 32GB 内存

  • VM2 - 8 核 64GB 内存

我使用 SSIS 目录在两个 VM 上同时运行相同的进程,所有进程都在它自己的 VM 上执行,因此没有信息通过网络传输..Aaa我发现这些进程的加载时间在 VM2 上相当慢。

加载:

  • VM1- 15m

  • VM2- 45m

我检查了一些性能指标并进行了一些基本测试...在加载期间我可以看到 Network I/O Waits

  • VM1- 600 毫秒/秒

  • VM2- 750 毫秒/秒

我假设这个网络 I/O 等待来自 SSIS,因为 SSIS 正在对 SQL Server 执行查询,然后批量插入信息,等待统计告诉我这两种情况的等待类型都是 ASYNC_NETWORK_IO。

我还使用 SP_SPACEUSED 进行了测试,以查看同时插入两个表中的行数,结果不是非常准确,但 VM1 几乎使插入的行数翻了一番......

我错过了任何进一步的测试吗?你想到的其他检查吗?

Tom*_*m V 5

您在虚拟化环境中运行,因此仅仅因为服务器具有更多虚拟 RAM 或更多 vCPU 并不意味着它“更快”(如您所称)。

虚拟化层抽象了几个因素,您需要了解甚至对它们进行基准测试。

例如,无法保证 vmdk 下的存储接近可比性,因此您需要对存储进行基准测试并在物理级别对其进行监控。

底层物理 CPU 也可以产生巨大的差异。物理处理器有多快?CPU 在虚拟化层中是否过度使用(即每个物理核心分配了更多的 vCPU)等。
您可以查看 VMWare 中的 CSTP 或 RDY 值等。

如果您不了解底层硬件和虚拟化配置,那么调用一台服务器的速度确实不可能比另一台更快,因为它拥有更多的虚拟资源。

你可以检查的一些事情是

  • 存储性能
  • vCPU/pCPU 比率(过度使用资源)
  • 虚拟机在同一个机器上运行(除非您可以访问 VMWare/Hyper-V 计数器,例如 esxtop CSTP 和 RDY 值,否则您可能不知道您的邻居在做什么)。
  • VM 层上的 NUMA 设置
  • 底层机器的 bios 中的电源设置和超线程配置,以确保它们在未完全受压时表现良好(就像运行基准测试时一样)
  • ...

我希望其中一些指针可以帮助您进一步排除故障,但是没有任何关于底层硬件的确凿证据,比较虚拟资源配置以确定哪个 VM 应该“更快”确实没有任何意义

话虽如此,您可能会通过查看 perfmon 计数器来确定磁盘延迟或 cpu 负载,或者甚至使用一些 VMWare 计数器(例如以 MHz 为单位的有效速度或被盗时间),并且您可以从等待统计信息中获得一些信息,但我仍然认为访问有关 VM 配置和底层硬件的一些信息是必不可少的。

如果可以,请对底层硬件进行基准测试。