在虚拟机中运行 SQL Server 的最佳做法是什么?

Jer*_*yOL 21 sql-server

在虚拟机中运行 SQL Server 的最佳做法是什么?我的在线交易活动非常少,但是为了向多个网站提供报告数据而进行了大量数据处理。

Dav*_*ett 18

与物理机一样,IO 为王。虚拟化会产生明显的 IO 命中(命中多少取决于您选择的技术),因此请确保您不要做任何会加剧这种情况并进一步损害 IO 性能的事情。

  • 始终使用固定大小,而不是动态虚拟磁盘,并确保底层驱动器/阵列足够。动态虚拟磁盘的性能低于固定大小的虚拟磁盘。
  • 如果 VM 中的数据不是关键任务,请打开 VM 解决方案缓存写入的功能(在将内容物理写入磁盘时有效地向来宾操作系统撒谎)以获得额外性能。这对于数据很容易替换的开发和测试机器很有用,或者对于主机本地的只读副本,如果遇到任何问题可以重新创建,但建议在生产和备份系统中不要使用此类选项,如如果机器意外关闭,它们会增加数据丢失(或更糟,损坏)的机会。
  • 确保每个 VM 都有足够的 RAM 专用于它,以便每个数据库的正常工作集适合内存,并有足够的空闲空间以避免不必要的 IO。此外,确保虚拟机管理程序不会在任何时候调出 VM 的 RAM(例如,大多数 VMWare 产品都可以这样做,这允许您在同一硬件上运行比其他方式更大的 VM 集,但性能下降可能很大 - 可以选择调整或关闭此行为)。
  • 如果主机使用 RAID5 阵列,请考虑迁移到 RAID10。这将减少可用空间,但会消除 RAID5(或 6)可能出现的写入性能问题。
  • 对于可能会出现大量 IO 活动的 VM,请考虑为它们提供自己的驱动器或阵列,或者仅让它们与活动较少的数据共享其驱动器/阵列。

当然,如果您的整个数据库(以及 VM 正在运行的所有其他内容)都适合分配给 VM 的 RAM,并且它看到的写入活动很少,那么 IO 性能问题就小得多。

编辑:还有几点:

  • 如果使用虚拟磁盘,请确保使用最佳控制器类型以提高性能。一些虚拟化解决方案提供了多种虚拟控制器类型以实现更好的来宾兼容性,并且您可能会发现由于它们模拟的设计中的协议限制和来宾操作系统驱动程序中的限制,您可能会发现某些类型的效率比其他的低。
  • 如果您的虚拟化解决方案为虚拟驱动器控制器提供特定驱动程序,请确保您的来宾操作系统正在使用它们 - 这些可以通过减少内存到内存副本和主机<->管理程序<->来宾上下文的数量来加速批量 IO一些操作中涉及的开关。
  • 如果您也使用简单的 SMB 共享或 iSCSI 等网络存储,则上述两点也适用:确保您使用的是最高效的虚拟网络控制器,并且您的来宾操作系统正在使用推荐的驱动程序,否则会出现延迟并且带宽可能比虚拟化层需要的更有限。