SAN 上的 SQL Server,相同的 LUN:一个逻辑驱动器与多个逻辑驱动器

mrQ*_*rQQ 6 performance sql-server storage san virtualisation

首先,让我先说我确实注意到有多个类似的问题,但它们都不是我想要问的,而且没有一个有明确的答案。

其次,让我确认我确实理解,即使在 SAN/虚拟化环境中,也建议对日志/数据使用不同的 LUN/spindle。

现在的问题是:

如果只有一个 LUN 分配给 SQL Server 虚拟机,以下配置之间是否存在性能(不是管理、安全或任何其他)差异:

  1. 一个虚拟磁盘文件(vhd、vmdk 等),一个虚拟控制器,虚拟操作系统中的一个逻辑分区,以及该分区中的 tempdb/data/log
  2. 一个虚拟磁盘文件,一个虚拟控制器,但多个逻辑分区/驱动器号用于 tempdb/data/log
  3. 多个虚拟磁盘文件 一个单独的虚拟控制器,为 tempdb/data/log提供单独的分区

到目前为止,我听到了以下答案:

  1. 没有可忽略不计的性能差异,至于到底,它与同一个IO能力仍然只是同一主轴
  2. 在性能差一些场景因为虚拟控制器必须在单独的(虚拟)IO队列和调度访客OS

如果重要的话,让我们假设工作负载是非常多的线程和非常小的请求(如此深的小队列)。

我想一劳永逸地解决这个问题,所以我想请教一个 LUN性能问题,不要提出优化布局的建议。

Han*_*non 5

在您的问题中,您说“一个 LUN 分配给 SQL Server 虚拟机”-您想要的是分配给管理程序计算机的一个 LUN,该管理程序计算机可以为存储在其上的 SQL Server 存储多个虚拟机磁盘。这允许 VM 使用大量线程来访问磁盘。

为了从 VMware 中获得最佳队列深度,您需要使用尽可能多的独立虚拟控制器和驱动器。如果可能,请确保使用半虚拟化控制器。请参阅VMware 的此博客

我将 tempdb 放在 2 个控制器上(有 4 个文件,分布在两个控制器/LUN 上)。

我将数据放在控制器上,将 tempdb 放在控制器上。

虚拟控制器有自己的队列(就像硬件一样);通常最多为 32。很明显,32 并不是很多,因此拥有更多控制器实际上会增加有效队列深度。

显然,如果您追求性能,还有很多其他设置,例如 CPU 和内存预留。

标准警告适用于此;做您已经测试过的最适合您系统的解决方案。由于我们不知道您的实际负载、I/O 要求等,因此我们很难为您提供每个安装都遵循的硬性规则。


有关推动 I/O 性能的 VMware 白皮书在这里(警告,PDF)。