虚拟化SQL Server:为什么不呢?
我工作的IT部门试图将其所有数据存储在SAN上,以迁移到100%虚拟服务器。他们还没有这样做,但是该计划最终要求将现有的物理SQL Server计算机也移至虚拟服务器。
几个月前,我参加了Heroes Happen Here启动活动,在一次SQL Server会议中,演讲者顺便提到了这对生产系统不是一个好主意。
所以我在寻找一些东西:
- 什么是好主意的具体原因是什么?我需要参考,或者不打扰。我可以通过Google自己提出一个模糊的" I / O绑定"响应。
- 仅HHH发言人的回忆可能不会说服我们的IT部门改变主意。谁能直接指出我更权威的东西? "直接"是指比模糊的Books OnLine评论更具体的内容。请缩小一点。
解决方案
我通常在虚拟化软件时最担心的是许可。
这是有关MS SQL的文章。不确定处境,因此无法挑出任何要点。
http://www.microsoft.com/sql/howtobuy/virtualization.mspx
在虚拟环境中支持SQL Server。实际上,我会建议我们查看每个插槽的许可选项之一。这意味着我们可以根据需要在虚拟化(例如Windows 2008 Server Datacenter)系统中放置尽可能多的SQL Server实例,并且仅按计算机具有的处理器插槽付费。
这样做比这更好,因为DataCenter的每个套接字都获得了许可,并且虚拟机许可证数量不受限制。
我建议将Hyper-V群集在两台计算机上,这样一台计算机出现故障时,另一台计算机就可以恢复正常工作。
SAN当然是集群的,但是对于虚拟化,我们将获得性能上的提升(对我们而言可能是不值得的):
http://blogs.technet.com/andrew/archive/2008/05/07/virtualized-sql-server.aspx
http://sswug.org最近在其时事通讯中已对此进行了一些注释
这是一些VMWARE测试。
http://www.vmware.com/files/pdf/SQLServerWorkloads.pdf
当然,他们没有将它与物理机进行比较。但是,我们可能可以使用它们用于环境的工具进行类似的测试。
当前,我们在VMWARE环境中运行SQL Server 2005. 但是,这是一个非常轻载的数据库,它很棒。运行没有问题。
正如大多数人所指出的,这将取决于数据库负载。
也许我们可以说服IT部门在盲目实施之前进行一些良好的测试。
不,我不能指向任何特定的测试或者类似的东西,但是我可以凭经验说将生产数据库服务器放在虚拟机上不是一个好主意,尤其是在负载很大的情况下。
对开发很好。甚至可以进行测试(根据理论,如果它在虚拟盒子上的负载下运行良好,那么在生产时就可以运行良好),但在生产环境中则无法运行。
确实这是常识。我们是否要让硬件运行两个操作系统和一个sql服务器,或者一个操作系统和一个sql服务器?
编辑:
我的经历使我的反应有偏差。我曾在大型恒定负载下处理大型数据库。如果我们在轻负载下拥有较小的数据库,则虚拟化可能适合我们。
我可以根据个人经验来这么说,因为我正在处理这个问题。我目前作为承包商的工作场所为他们的SQL Server开发系统提供了这种类型的环境。我正在尝试发展一个相对温和的B.I.系统在这种环境下,确实在性能问题上苦苦挣扎。
在幼稚的虚拟机上,TLB丢失和模拟I / O的速度非常慢。如果操作系统具有半虚拟化支持(在Windows上仍不是成熟的技术),则可以使用半虚拟化的I / O(本质上是连接到VM中的API的设备驱动程序)。 Opteron的最新版本支持嵌套页表,这消除了在软件中模拟MMU的需要(这确实很慢)。
因此,运行在大型数据集上并执行大量I / O的应用程序(例如ETL流程)会跳到虚拟化的致命弱点。如果数据仓库系统之类的东西可能难以存储在内存或者磁盘I / O上,则应考虑其他因素。对于简单的事务性应用程序,可能还可以。
透视一下我正在使用的系统正在具有4x 2gbit F / C链接的SAN的刀片服务器(IBM服务器)上运行。这是一个中型SAN。该虚拟机具有4GB的RAM IIRC,现在有两个虚拟CPU。处于最佳状态(SAN处于安静状态),这仅是XW9300速度的一半,XW9300在1个U320总线上具有5个SCSI磁盘(系统,tempdb,日志,数据,数据)和4GB RAM。
工作量可能会有所不同,但我建议使用工作站系统(如我所描述的那样),该系统优先于SAN上的虚拟服务器来开发任何繁重的I / O。
除非资源使用要求超出了这种工具包的范围(在这种情况下,无论如何它们都远远超出了虚拟服务器的范围),否则这是一个更好的解决方案。硬件并没有那么昂贵,当然比SAN,刀片服务器机箱和VMWare许可便宜得多。 SQL Server开发人员版随附V.S.专业及以上。
这还具有一个好处,即开发团队从一开始就必须立即处理部署,因此必须提出一种易于"一键式"部署的架构。这并不像听起来那么难。 Redgate SQL Compare Pro在这里是朋友。开发人员还将获得数据库管理的基本工作知识。
快速浏览一下惠普网站后,我得到了带有四核至强芯片,4GB RAM,1x146和4x73GB 15k SAS硬盘的XW8600(当前基于至强处理器的型号)的标价约为4,600美元。街价可能会少一些。将此与SAN,刀片服务器机箱和VMware许可的价格以及该设置的备份成本进行比较。对于备份,我们可以为网络共享提供备份,人们可以根据需要删除压缩的DB备份文件。
- 它对朴素的虚拟化进行了基准测试,并将其与半虚拟化的解决方案(而不是裸机性能)进行了比较。
- OLTP基准测试将具有更多的随机访问I / O工作负载,并将花费更多时间等待磁盘查找。顺序性更高的磁盘访问模式(数据仓库查询的特征)将受到更高的惩罚,而具有大量TLB未命中的内存密集型操作(例如,SSAS是圣经中的猪) 。这意味着,与白皮书中引用的OLTP基准惩罚相比,此类处理的放慢速度可能会更加明显。
编辑:AMD网站上的此白皮书讨论了VM上的一些基准。从后面的基准测试来看,繁重的I / O和MMU工作负载确实破坏了VM的性能。他们的基准(因为这是供应商提供的统计信息,所以要花一小笔钱)表明OLTP基准的速度损失为3.5倍。由供应商提供时,应牢记以下几点:
我们在这里看到的是,TLB丢失和I / O在VM上非常昂贵。 MMU中具有半虚拟化驱动程序和硬件支持的良好体系结构将缓解部分或者全部这些问题。但是,我相信Windows Server 2003完全不支持半虚拟化,并且我不确定Windows 2008 Server中提供了什么级别的支持。根据我的经验,与相对适中的裸机硬件相比,VM在处理ETL流程和构建SSAS多维数据集时会大幅降低服务器速度。
我们正在VMWare上为900多个人员运行工资系统,没有任何问题。这已经生产了10个月。就数据库而言,这是中等大小的负载,我们在VM中预分配了驱动器空间以防止IO问题。我们必须定期对VM Host和VM Slice进行碎片整理,以保持可接受的性能。
我认为数据发生不良情况的可能性太大。
举一个简单的例子,假设我们在Virtual Server 2005 R2中运行了一个SQL Server框,并且撤消磁盘处于打开状态(因此,主"磁盘"文件保持不变,并且所有更改都针对一个单独的文件,可以清除)或者稍后合并)。然后发生了一些事情(通常,我们遇到了128GB的限制或者任何大小),半夜某个笨拙的管理员必须重新启动,并弄清楚他只有在删除撤消磁盘后才能重新启动。即使他保留撤消磁盘文件以供以后分析,我们也很费劲,将数据合并在一起的可能性很小。
因此,与该主题中的其他帖子相呼应的是,开发很棒,但对于生产来说,这并不是一个好主意。代码可以重新构建和重新部署(这是另一回事,用于源代码控制的VM也不是一个好主意),但是实时生产数据的重要性更高。
Within the server itself, there is suprisingly little knowledge of a lot of things in this area that are important to performance. SQL Server's core engine assumes things like: all CPUs are equally powerful all CPUs process instructions at about the same rate. a flush to disk should probably happen in a bounded amount of time.
在Conor Cunningham的博客文章Database Virtualization The Dirty Little Secret Nobody Talking About ...中有关于此的一些信息。引用:
帖子还将进一步阐述这些问题。考虑到一般而言,考虑到可用信息的匮乏,我认为这是一本不错的书。
请注意,那里有一些专门针对数据库的特殊虚拟化产品,而不是像VMWare这样的通用产品。
HP PolyServe Software for Microsoft SQL Server enables multiple Microsoft SQL Server instances to be consolidated onto substantially fewer servers and centralized SAN storage. HP PolyServe's unique "shared data" architecture delivers enterprise class availability and virtualization-like flexibility in a utility platform.
我们公司(超过200台SQL服务器)目前正在我们的某些服务器上部署HP Polyserve:
我们部署它的主要原因是使硬件更换更加容易:将新框添加到"矩阵",随机排列每个SQL实例所在的位置,然后删除旧框。对应用程序团队透明,因为SQL实例名称不变。
还应考虑在处理重要问题时可能引入的安全性问题。 《虚拟化安全性》是PandaLabs撰写的一篇不错的文章,其中涵盖了一些问题。
- 为什么系统管理员要虚拟化服务器
- 为什么要虚拟化SQL Server?
- 为什么不应该虚拟化SQL Server的原因
我想添加布伦特·奥扎(Brent Ozar)的这系列文章:
段落数量不匹配