虚拟化 SQL Server:为什么不呢?

34

我所在的IT部门正在尝试将所有数据存储在SAN上,将服务器虚拟化并达到100%的目标。他们还没有完全做到,但计划最终是将现有的物理SQL Server机器迁移到虚拟服务器。

几个月前我参加了Heroes Happen Here发布会之一,在其中一个SQL Server会话中,演讲者顺便提到这对于生产系统不是一个好主意。

因此,我正在寻找以下内容:

  1. 为什么这是或不是一个好主意的具体原因是什么?我需要引用资料,否则请不要回答。我可以通过谷歌得到一个模糊的“I/O bound”的回答。
  2. HHH演讲者的回忆本身可能无法说服我们的IT部门改变想法。有没有人能够直接指向更权威的资料?当我说“直接”时,我的意思是比一个模糊的Books OnLine评论更具体。请缩小范围。

1
值得注意的是,这个问题相当古老了,这里讨论的许多问题在理论上已经基本解决。然而,自从我写下被接受的答案以来,我在一些虚拟化数据库环境的网站上做了许多合同工作,并且在这些网站中大部分都出现了性能问题。尽管供应商所说的话不同,但你仍然需要注意虚拟化数据库环境中的存储配置和调优。 - ConcernedOfTunbridgeWells
14个回答

37
我可以从个人经验中说出这一点,因为我正在处理此问题。我目前作为承包商在一家公司工作,他们的SQL Server开发系统采用了这种环境。我试图在这个环境中开发一个相当简单的B.I.系统,但是性能问题让我很苦恼。
在天真的虚拟机上,TLB缺失和模拟I/O非常缓慢。如果您的操作系统支持半虚拟化(这在Windows上仍然不是一项成熟的技术),则可以使用半虚拟化I/O(实质上是钩入VM中的API的设备驱动程序)。Opteron的最新版本支持嵌套页表,这消除了在软件中模拟MMU(非常缓慢)的需要。
因此,运行大数据集并进行大量I/O的应用程序(例如ETL过程)会遇到虚拟化的弱点。如果您有像数据仓库系统这样可能对内存或磁盘I/O造成压力的东西,您应该考虑其他解决方案。对于简单的事务应用程序,它们可能还好。
我使用的系统运行在刀片上(IBM服务器)上,连接着一个4x 2gbit F/C链路的中档SAN。虚拟机有4GB RAM和两个虚拟CPU。即使在SAN非常安静的情况下,它的速度也只有XW9300的一半。你的情况可能不同,但我建议开发任何I/O重的东西时都应该选择工作站系统,而不是基于SAN的虚拟服务器。除非你的资源使用要求超出这种套件(在这种情况下,它们已经远远超出了虚拟服务器),否则这是一个更好的解决方案。硬件并不那么昂贵,肯定比SAN、刀片机箱和VMWare许可证便宜得多。SQL Server开发人员版附带V.S. Pro及以上版本。
这也有一个好处,就是你的开发团队被迫从一开始就处理部署 - 你必须设计一个易于“一键”部署的架构。这并不像听起来那么难。Redgate SQL Compare Pro在这里是你的朋友。你的开发人员还可以获得数据库管理的基本工作知识。

我快速访问了惠普公司的网站,得到了一份价格清单,对于一台装备有四核Xeon芯片,4GB内存和1x146以及4x73GB 15k SAS硬盘的XW8600(他们目前的基于Xeon的型号),其价格约为$4,600。街机价格可能会略低。将此与SAN、刀片底座和VMware许可证的价格以及该设置的备份成本进行比较。对于备份,您可以提供一个网络共享备份位置,人们可以根据需要放置压缩的数据库备份文件。

编辑:AMD网站上的这篇白皮书讨论了虚拟机的一些基准测试。从后面的基准测试中可以看出,重I/O和MMU工作负载确实会影响虚拟机的性能。他们的基准测试(需要注意的是这是供应商提供的统计数据)表明,在OLTP基准测试中存在3.5倍的速度惩罚。虽然这是供应商提供的数据,但也要谨慎对待:

  • 它对天真的虚拟化进行基准测试,并将其与半虚拟化解决方案进行比较,而不是裸机性能。

  • OLTP基准测试将具有更多的随机访问I/O工作量,并且将花费更多时间等待磁盘寻道。更顺序的磁盘访问模式(特征数据仓库查询)将有更高的惩罚,而具有大量TLB缺失的内存密集型操作(例如SSAS)也将产生额外的惩罚。这意味着这种类型的处理的减速可能比白皮书中引用的OLTP基准测试惩罚更为明显。

我们在这里看到的是,在VM上,TLB缺失和I/O非常昂贵。具有半虚拟化驱动程序和MMU硬件支持的良好架构将减轻部分或全部这些问题。但是,我认为Windows Server 2003根本不支持半虚拟化,而且我不确定Windows 2008服务器提供了什么级别的支持。毫无疑问,根据我的经验,在ETL过程和SSAS立方体构建时,与相对较低规格的裸机硬件相比,VM将使服务器显着减速。


8

7

3
我们正在使用VMware为900多人运行薪资系统,目前没有出现任何问题。这已经在生产中运行了10个月。就数据库而言,它是一个中等负载,我们预先分配了VM驱动器空间以防止IO问题。为了保持可接受的性能,您需要定期对VM主机和VM切片进行碎片整理。

2

下面是关于 VMWARE 测试的一些内容: http://www.vmware.com/files/pdf/SQLServerWorkloads.pdf

需要指出的是,它们没有将其与物理机进行比较。但是,您可以使用它们用于您的环境的工具进行类似的测试。

我们目前在 VMWARE 环境中运行 SQL Server 2005。但是,这是一个非常轻负载的数据库,运行良好,没有问题。

正如大多数人指出的那样,它将取决于您的数据库负载。

也许您可以说服 IT 部门在盲目实施之前进行一些良好的测试。


1

老问题,老答案

本帖中的答案已经几年前的了。整个帖子中大部分负面评论在技术上仍然是正确的,但现在不再那么重要了。虚拟化和SAN的开销成本现在比以前更小。一个正确配置的虚拟化主机、客户端、网络和SAN可以提供良好的性能和虚拟化的益处,包括只有在虚拟环境下才有的恢复方案。

然而,在实际应用中,只需要一个小的配置问题就可能导致整个系统崩溃。在实践中,你在使用虚拟SQL服务器时最大的挑战是说服并与负责虚拟化的人合作,使其得到正确的设置。

具有讽刺意味的是,在我们将生产环境从虚拟化中移回专用硬件的100%的情况下,专用硬件的性能都会飙升。在所有这些情况下,不是虚拟化的问题,而是虚拟化设置的方式。通过回到专用硬件,我们实际上证明了虚拟化是更好的资源利用方式,因为其效率提高了5倍或更多。现代软件通常设计为跨节点扩展,因此虚拟化在这方面也对你有利。


1

请注意,有一些专门针对数据库的虚拟化产品可能比VMWare等通用产品更值得考虑。

我们公司(超过200个SQL服务器)目前正在部署HP Polyserve到我们的一些服务器上:

HP PolyServe软件为Microsoft SQL Server提供支持,可以将多个Microsoft SQL Server实例合并到较少的服务器和集中式SAN存储器上。 HP PolyServe的独特“共享数据”架构在实用平台中提供企业级可用性和虚拟化般的灵活性。

我们部署它的主要原因是使硬件更换更容易:将新盒子添加到“矩阵”中,重新安排每个SQL实例所在的位置(无缝),然后删除旧盒子。应用程序团队不会察觉到变化,因为SQL实例名称不会改变。


我不明白为什么需要一个产品来将RDBMS服务器整合到更少的物理服务器上。至少对于Oracle而言,您可以在同一台机器上安装多个实例...使用不同的SID和端口进行区分。并且您不能只使用DNS更改来隐藏服务器的移动吗?再次以Oracle为例。TNSNAMES指向DNS中的网络名称。当服务器移动时,我们更改DNS网络名称到IP映射... voila,透明。我不明白Polyserve的优势在哪里。 - Stephanie Page
@Stephanie:在同一主机上安装多个SQL实例不需要安装HP Polyserve,但它提供了一个监控层,允许这些实例在维护期间或出现故障时移动到另一个主机。由于我的原始答案是在2008年发布的,我们正在将Polyserve迁移到VMWare环境,用于我们的SQL数据库服务器。 - BradC

1

不,我不能指出任何具体的测试或类似的东西,但是从经验上来说,将生产数据库服务器放在虚拟机上是一个坏主意,特别是如果它有很大的负载。

对于开发来说还好。甚至可能是测试(基于这样的理论:如果它在虚拟机上承受负载良好,那么它在生产环境中也会运行良好),但不适用于生产环境。

这是常识。你想让你的硬件运行两个操作系统和你的SQL服务器,还是一个操作系统和SQL服务器?

编辑: 我的经验影响了我的回答。我曾经处理过大型数据库和重负载。如果您有一个较小的数据库和轻负载,则虚拟化可能适合您。


我修改了我的问题以反映“生产”问题。很多其他系统都在虚拟化下工作。如果通过添加一个操作系统(几乎总是空闲的操作系统)可以使备份/恢复更好,并提高群集和正常运行时间,那么为什么不呢? - Joel Coehoorn

1

关于这个问题,Conor Cunningham的博客文章Database Virtualization - The Dirty Little Secret Nobody is Talking About...中提供了一些信息。引用他的话:

在服务器本身内部,对于性能非常重要的许多事情,其实知道得很少。SQL Server的核心引擎假设以下内容:

  1. 所有CPU的性能都相同
  2. 所有CPU以大约相同的速度处理指令。
  3. 刷新到磁盘应该在有限的时间内完成。

这篇文章还进一步阐述了这些问题。考虑到普遍缺乏有关此问题的可用信息,我认为这是一篇值得一读的好文章。


0

你从错误的角度来看待这个问题。首先,你不会从供应商那里找到关于为什么“不”虚拟化或者为什么要虚拟化的白皮书。

每个环境都是不同的,你需要根据你的环境选择适合你的方案。话虽如此,有些服务器非常适合虚拟化,而有些则不应该被虚拟化。例如,如果你的SQL Server每秒钟处理数百万次交易,就像你的服务器位于纽约证券交易所或纳斯达克一样,数百万美元依赖于它,那么你可能不应该将其虚拟化。确保你了解虚拟化SQL服务器的后果。

我曾经见过人们一遍又一遍地虚拟化SQL,只因为虚拟化很酷。然后当虚拟机服务器表现不如预期时,他们抱怨。

你需要做的是设定一个基准,全面测试你想要部署的解决方案,并展示它能做什么和不能做什么,以免出现任何意外。虚拟化很棒,它对环境有好处,通过整合可以节省成本,但你需要向你的主管展示为什么你不应该虚拟化你的SQL服务器,只有你才能做到这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接