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

时间:2008-09-29 15:51:18

标签: sql-server performance virtualization

我工作的IT部门正在尝试迁移到100%虚拟化服务器,所有数据都存储在SAN上。他们尚未完成,但该计划最终还要求将现有的物理SQL Server计算机移动到虚拟服务器。

几个月前,我参加了Heroes Happen Here发布活动,并且在一个SQL Server会话中,发言者顺便提到,这对于生产系统来说不是一个好主意。

所以我正在寻找一些东西:

  1. 为什么这个或不是个好主意的具体原因是什么?我需要参考,或者不需要回应。我可以通过谷歌自己提出一个模糊的“I / O界限”回复。
  2. 单独的HHH演讲者回忆可能不会说服我们的IT部门改变他们的想法。任何人都可以直接指出一些更具权威性的东西吗?而且,通过“直接”,我的意思是更具体的东西,而不仅仅是模糊的在线书籍评论。请把它缩小一点。

14 个答案:

答案 0 :(得分:36)

我可以从个人经验中说出这一点,因为我正在处理这个问题。我目前作为承包商工作的地方为他们的SQL Server开发系统提供了这种类型的环境。我正在努力开发一个相当适度的B.I.在这种环境下系统并且真的在努力解决性能问题。

在天真的虚拟机上,TLB未命中和模拟I / O非常慢。如果您的操作系统具有半虚拟化支持(在Windows上仍然不是一项成熟的技术),则使用半虚拟化I / O(本质上是挂接到VM中的API的设备驱动程序)。最新版本的Opteron支持嵌套页表,无需在软件中模拟MMU(这非常慢)。

因此,运行在大型数据集上并执行大量I / O(例如)ETL过程的应用程序会超越虚拟化的致命弱点。如果您有类似数据仓库系统的内存或磁盘I / O,您应该考虑其他事情。对于简单的事务性应用程序,它们可能是O.K。

从视角来看,我正在使用的系统运行在具有4x 2gbit F / C链路的SAN上的刀片(IBM服务器)上。这是一个中档SAN。 VM有4GB的RAM IIRC,现在有两个虚拟CPU。在最好的情况下(当SAN安静时),这仍然只是XW9300速度的一半,它在1 U320总线和4GB RAM上有5个SCSI磁盘(系统,tempdb,日志,数据,数据)

您的里程可能会有所不同,但我建议您使用我所描述的工作站系统来开发任何I / O,而不是SAN上的虚拟服务器。 除非您的资源使用要求超出此类工具包(在这种情况下,它们远远超出虚拟服务器),这是一个更好的解决方案。硬件并不昂贵 - 当然比SAN,刀片机箱和VMWare许可便宜得多。 SQL Server开发人员版附带V.S.专业及以上。

这也有一个好处,就是你的开发团队不得不从单词go开始处理部署 - 你必须想出一个易于“一键式”部署的架构。这并不像听起来那么难。 Redgate SQL Compare Pro是你的朋友。您的开发人员还可以获得数据库管理的基本工作知识。

快速前往HP's website的XW8600(他们目前基于xeon的型号)的价格约为4,600美元,配备四核xeon芯片,4GB内存和1x146以及4x73GB 15k SAS硬盘。街头价格可能会略低一些。将其与SAN,刀片服务器机箱和VMware许可的价格以及该设置的备份成本进行比较。对于备份,您可以提供具有备份的网络共享,人们可以根据需要删除压缩的数据库备份文件。

编辑:This whitepaper on AMD's web-site讨论VM上的一些基准测试。从后面的基准测试来看,繁重的I / O和MMU工作负载确实破坏了VM的性能。他们的基准(由于供应商提供的统计数据而被视为一粒盐)表明OLTP基准测试的速度降低了3.5倍。虽然这是供应商提供的,但应该牢记:

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

  • OLTP基准测试将有更多 随机访问I / O工作量,并将 花更多时间等待磁盘 寻找。一个更顺序的磁盘 访问模式(特征) 数据仓库查询)将有一个 更高的罚款和记忆沉重 操作(例如,SSAS是一个 圣经记忆猪()有一个 大量的TLB未命中也将 招致额外的处罚。这个 意味着这个减速 处理的类型可能是 比OLTP更明显

我们在这里看到的是,TLB未命中,I / O在VM上非常昂贵。 MMU中具有半虚拟化驱动程序和硬件支持的良好体系结构将减轻部分或全部这些问题。但是,我认为Windows Server 2003根本不支持半虚拟化,我不确定Windows 2008服务器提供的支持级别。我的经验当然是,与相对适度规范的裸机硬件相比,VM在处理ETL过程和SSAS多维数据集构建时会大大减慢服务器速度。

答案 1 :(得分:8)

< - > SAN - 当然还有群集,但是关于虚拟化 - 你会受到性能影响(可能是也可能不值得):

http://blogs.technet.com/andrew/archive/2008/05/07/virtualized-sql-server.aspx

http://sswug.org最近在他们的每日时事通讯中有一些关于它的说明

答案 2 :(得分:6)

我想添加Brent Ozar撰写的这一系列文章:

在我希望的意义上来说,它并不完全是权威(来自构建服务器的团队,或某种官方手册),但Brent Ozar非常受尊重,我认为他在这里做了很好的工作。

答案 3 :(得分:3)

我们正在为VMWare上的900多人运行工资单系统,没有任何问题。这已经生产了10个月。就DB而言,它是一个中等负载,我们在VM中预先分配了驱动器空间以防止IO问题。您必须定期对VM主机和VM片进行碎片整理,以保持可接受的性能。

答案 4 :(得分:2)

这里有一些VMWARE测试.. http://www.vmware.com/files/pdf/SQLServerWorkloads.pdf

当然,他们不会将它与物理机器进行比较。但是,您可以使用他们用于您的环境的工具进行类似的测试。

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

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

也许你可以说服IT部门在盲目实施之前做一些好的测试。

答案 5 :(得分:1)

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

发展很好。可能甚至测试(根据理论,如果它在虚拟盒子上运行正常,它将在生产中运行良好)但不在生产中。

这是常识。您是否希望您的硬件运行两个操作系统和您的SQL Server或一个操作系统和SQL Server?

编辑: 我的经历使我的回答有偏见。我在繁重的恒定负载下使用大型数据库。如果您在轻负载下拥有较小的数据库,虚拟化可能适合您。

答案 6 :(得分:1)

Conor Cunningham 博客文章Database Virtualization - The Dirty Little Secret Nobody is Talking About...中有一些相关信息。引用:

  

在服务器本身,对于这个领域中很多对性能很重要的事情知之甚少。 SQL Server的核心引擎假设如下:

     
      
  1. 所有CPU都同样强大
  2.   
  3. 所有CPU以大致相同的速率处理指令。
  4.   
  5. 刷新到磁盘可能会在有限的时间内发生。
  6.   

该帖还继续进一步阐述这些问题。考虑到这个问题的普遍存在,考虑到可用信息的稀缺性,我认为这是一个很好的阅读。

答案 7 :(得分:1)

请注意,有些专业虚拟化产品是针对可能值得研究的数据库而不是像VMWare这样的通用产品。

我们公司(超过200台SQL服务器)目前正在部分服务器上部署HP Polyserve

  

适用于Microsoft SQL Server的HP PolyServe软件可将多个Microsoft SQL Server实例整合到更少的服务器和集中式SAN存储中。 HP PolyServe独特的“共享数据”架构可在实用程序平台中提供企业级可用性和类似虚拟化的灵活性。

我们部署它的主要原因是使硬件更换更容易:将新框添加到“矩阵”,在每个SQL实例所在的位置(无缝地)进行随机播放,然后删除旧框。对应用程序团队透明,因为SQL实例名称不会更改。

答案 8 :(得分:1)

旧问题与旧答案

这个帖子中的答案已有数年之久。整个线程中的大多数负面点在技术上仍然是正确的,但相关性较低。虚拟化和SAN的开销成本现在远不如以前那么大。正确配置的虚拟化主机,来宾,网络和SAN可以提供良好的性能,具有虚拟化和操作灵活性的优势,包括仅通过虚拟提供的良好恢复方案。

但是,在现实世界中,只需要一个小的配置细节就可以让整个事情瘫痪。在实践中,您对虚拟SQL服务器的最大挑战是说服并与负责虚拟化的人员合作,以使其正确设置。

具有讽刺意味的是,在100%的情况下,我们将生产从虚拟化中解放出来,并将其转回到专用硬件性能上。在所有这些情况下,它不是虚拟化,而是它的设置方式。通过回到专用硬件,我们实际证明了虚拟化可以更好地利用资源5或更多。现代软件通常设计为跨节点扩展,因此虚拟化也可以在这方面发挥作用。

答案 9 :(得分:0)

当虚拟化软件通常是许可时,我最关心的问题。

这是一篇关于MS SQL的文章。不确定你的情况所以不能找出任何重点。

http://www.microsoft.com/sql/howtobuy/virtualization.mspx

答案 10 :(得分:0)

虚拟环境支持SQL Server。事实上,我建议它看到每个插槽的许可选项之一。这意味着您可以根据需要在虚拟化(例如Windows 2008 Server Datacenter)系统中放置尽可能多的SQL Server实例,并仅按计算机的每个处理器插槽支付费用。

这比这更好,因为DataCenter每个插槽的许可也包含无限制的虚拟机许可证。

我建议在两台计算机上集群化你的Hyper-V,这样如果一台机器出现故障,另一台机器就可以解决这个问题。

答案 11 :(得分:0)

我认为数据发生不良事件的可能性太大了。

作为一个简单的例子,假设您在Virtual Server 2005 R2中运行了一个SQL Server框并且已打开撤消磁盘(因此,主“磁盘”文件保持不变,并且所有更改都是针对单独的文件进行的可以在以后清除或合并)。然后发生了一些事情(通常,你遇到128GB的限制或任何大小)和一些半夜无能的管理员必须重新启动,并发现他不能这样做,直到他删除撤销磁盘。你搞砸了 - 即使他保留了撤销磁盘文件供以后分析,将数据合并在一起的可能性也很小。

所以回应这个帖子中的其他帖子 - 对于开发它很棒但是对于生产来说这不是一个好主意。您的代码可以重建和重新部署(这是另一件事,VM的源代码控制也不是一个好主意),但您的实时生产数据更重要。

答案 12 :(得分:0)

还应考虑在处理Vitalization时可能引入的安全问题。 Virtualization Security是PandaLabs的一篇很好的文章,涵盖了一些问题。

答案 13 :(得分:0)

你是从错误的角度看这个。首先,您不会从供应商那里找到白皮书,为什么您应该“不”虚拟化或为什么要进行虚拟化。

每个环境都不同,您需要在环境中运行。话虽如此,有些服务器非常适合虚拟化,有些服务器不应该虚拟化。例如,如果您的SQL Server每秒进行数百万次交易,例如您的服务器位于纽约证券交易所或纳斯达克,并且数百万美元依赖于它,您可能不应该虚拟化它。确保您了解虚拟化SQL Server的后果。

我已经看到人们一遍又一遍地虚拟化SQL只是因为虚拟化很酷。然后在VM服务器未按预期执行时进行投诉。

您需要做的是设置一个基准测试,完全测试您要部署的解决方案,并展示它能做什么,不能做什么,这样您就不会遇到任何意外。虚拟化很棒,它有利于环境并通过整合进行保存,但您需要向主管说明为什么您不应该虚拟化SQL Server,只有这样才能实现。

相关问题