从 VHD 上的 Hyper-V 客户机运行时,SQLIO 会说谎吗?

从 VHD 上的 Hyper-V 客户机运行时,SQLIO 会说谎吗?

SQLIO 似乎是一个有用的工具。我认为尝试测量物理磁盘和 VHD 之间的速度差异会很有趣。所以我在物理驱动器上的 Hyper-V 主机上运行了 SQLIO。结果似乎合理。然后我从客户机运行它来测试 vhd(在同一个物理磁盘上)。我预计它会慢一点。但事实是它快得多——平均延迟为 0ms。

所以我想在这里学习一些东西。似乎 hyper-v 以某种方式欺骗了 SQLIO,但我对它了解不够多,无法弄清楚。

它是一个动态 vhd,没有快照或任何东西,并且 vhd 是磁盘上的唯一文件。物理磁盘实际上是两个 SAS 驱动器 RAID 1。

答案1

我知道我来晚了,但我发现在动态磁盘上使用 SQLIO 确实会产生错误的结果。其背后的原因是 tesfile.dat 只是一个清零文件,因此动态磁盘足够聪明,可以在后台压缩此文件,这反过来意味着它将适合您的磁盘缓存。因此,您的 SQLIO 测试本质上只是测试您的缓存有多快。

我确信这个问题已经得到很好的解决,但是我在测试时很难找到答案,所以我认为把它写下来以供将来参考可能会有用:)

史蒂芬

答案2

是的,Hyper-V 正在通过事务捆绑“欺骗”sqlio。Hyper-V 服务器的 SQL VM 不应将数据库或日志存储在 VHD 中。您应该使用某种类型的直通磁盘(包括 iSCSI)。

微软有一个Hyper-V 上的 SQL 指南列表配置直通磁盘的一些细节

答案3

您使用的测试文件有多大?通过增加测试文件的大小(可能增加到几 GB),您应该能够最大限度地减少缓存的影响。

答案4

更直接地说,虚拟机中的时间以可变的速率流逝。在物理机器中,有一个晶体和一个时钟以恒定的速率发出精确的周期。操作系统使用它来报时。但在虚拟机上,时钟可以减慢或加快。虚拟机管理程序根据负载决定虚拟时钟的快慢。

相关内容