在虚拟机中运行任何程序都会对性能产生一定程度的影响,但影响有多大?真的影响数据库系统的性能?
我发现这篇学术参考论文有一些有趣的基准测试,但这只是使用 Xen 和 PostgreSQL 进行的有限测试。结论是使用 VM“不会以高性能为代价”(尽管您可能认为实际数据并非如此)。
在虚拟机中运行数据库有哪些技术、管理和其他缺点?
请发布有客观事实支持的答案,我对猜测或任何其他半宗教论点不感兴趣(极客热情在很多方面都是好的,但这对我们没有帮助)。
话虽如此,
- 在虚拟机中运行数据库时会出现哪些问题?(请发布参考资料)
- 这些问题重要吗?
- 它们只在某些情况下才有意义吗?
- 有哪些解决方法?
答案1
尽管许多数据库供应商在这方面进展缓慢,但现在几乎所有供应商都正式支持其软件在虚拟化环境中运行。
我们在 ESXi 上运行了许多 Linux 中的 Oracle 11g 实例,当然可以获得非常好的性能。与所有硬件扩展一样,您只需要确保虚拟化主持人拥有充足的资源(RAM、CPU),并且磁盘层能够提供您所需的任何 IO 性能。
答案2
正如 ErikA 所说,这种情况正变得越来越普遍。我属于 SQL Server 阵营,个人没有任何在 VM 中运行的生产系统,但我不会犹豫(在对该主题进行更多研究之后)。不过,在走这条路之前,肯定有一些事情需要考虑(至少对于 SQL Server 而言)。磁盘 IO(正如其他人提到的)和内存分配只是两个例子。不同的虚拟机管理程序之间也会有所不同。
Brent Ozar 是 SQL Server 虚拟化(尤其是 VMWare)领域的公认专家。我强烈建议您阅读他的资料。
http://www.brentozar.com/community/virtualization-best-practices/
答案3
有能然后是应该。克尔维特可以跑 150 英里每小时,但你应该在公共高速公路上开吗?你可能会不必要地伤害自己。
数据库是客户操作系统。根据设计,它们在启动时会抓取资源块并直接管理,以达到性能目的。只要您将数据库服务器的核心操作系统设为虚拟化托管环境中的客户,您就会在磁盘和 RAM 的块分配元素与数据库服务器之间放置一个带有虚拟机管理程序的仲裁层。它会变慢。您的查询效率越低,它就会越慢。这些低效率今天可能在专用硬件上被掩盖,但只要您将仲裁引入到依赖资源中,您就会很快发现。
许多要求虚拟化的会计人员未能认识到,作为客户操作系统,数据库服务器提供了自己的整合层。没有理由不能将多个逻辑数据库实例整合到一台物理服务器上,甚至可以移动 IP 地址、设置其他主机名等,以便实现这种自然的服务合并。而且,使用这种模式,您不仅可以保留管理层为减少物理主机数量而推动的成本节约,还可以保留对物理资源的块访问,而不会受到任意虚拟机管理程序的影响,虚拟机管理程序有时会做出有益的决策,有时则不会。
对于其他客户操作系统(如 Java)来说也是如此。虚拟化解决方案通常处于繁忙环境中,并且虚拟机管理程序必须就谁“获得资源上的令牌”做出大量决策。只要您能够消除该层,您就会变得更好。
首先使用自然客户操作系统层合并多个实例。这样您就更有可能轻松实现平台整合和性能目标。
答案4
在虚拟机上运行 SQL Server 是没有问题的,只要您能为虚拟机提供足够的资源来运行您的应用程序即可。如果在物理世界中您需要 24 个核心和 256 GB 的 RAM,那么您需要在虚拟世界中提供 24 个 vCPU 和 256 GB 的 RAM。
我只是写了一篇文章上个月的 SQL Server 杂志介绍了在 VMware 的 vSphere 下运行 SQL Server 的全部内容。