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


21

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


2
磁盘存储在哪里?在本地5400 RPM HDD上?在具有光纤连接和15k主轴磁盘的SAN上?如今,所有虚拟机都是关于IO的,CPU几乎没有考虑。
jcolebrand

不,不是本地的。但是我不知道SAN的细节。
JerryOL 2011年

2
由于尚不具备足够的声誉,因此无法添加注释,但是[根据Microsoft] [1]在2008 R2中,固定和动态虚拟磁盘之间的性能差异很小。[1]:blogs.msdn.com/b/tvoellm/archive/2009/08/05/...
特里Bochaton

@Terry,将来随时标记这样的答案,我们将为您转换。
jcolebrand

Answers:


18

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

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

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

编辑:还有几点:

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

1
好,是的,不是。通过iSCSI启动器安装到VM的SAN卷将非常快!
盖乌斯

1
@Gaius:好点。我添加了有关vNIC和驱动程序的说明,在这些情况下,它们可能是额外瓶颈的根源。
David Spillett

9

1
〜您可能想从文章中强调其中的任何部分吗?
jcolebrand

2
否。由于虚拟化可能是一个复杂的主题,因此建议您阅读所有内容。其实不是那么多。如果OP正在寻找快速答案,则可能不是正确答案。
埃里克·汉弗莱

我通常遵循最佳实践。将SQLServer 2000 Standard迁移到新的VM之后,我正试图解决网站调用存储过程的问题,如果存储过程未缓存在存储过程中,存储过程现在将超时;即使物理和VM分配的内存是相同的4GB。
JerryOL 2011年

1
@JerryOL:确保分配给VM的RAM是容许被调出(否则的4Gb分配给虚拟机是不一样的物理机器上有4GB),如果虚拟化解决方案使用提供了不同的虚拟控制器类型确保选择最佳的驱动程序,并且来宾操作系统使用正确的驱动程序。
David Spillett
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.