在虚拟机中运行数据库有什么缺点?我如何克服它们?

Rus*_*uss 65 oracle postgresql virtualization database sql-server

在虚拟机中运行的任何事情都会有性能损失的一定水平,但需要多少真正影响数据库系统的性能?

我发现这篇学术参考论文有一些有趣的基准测试,但它是仅使用 Xen 和 PostgreSQL 的有限测试。结论是,使用虚拟机“不会以很高的性能成本”(尽管您可能认为实际数据并非如此)。

在虚拟机中运行数据库有哪些技术、管理和其他缺陷?

请发布可以得到客观事实支持的答案,我对猜测或任何其他半宗教论点不感兴趣(极客的热情在很多方面都很好,但这对我们没有帮助)。

话虽如此,

  • 在虚拟机中运行数据库时会出现什么问题?(请发参考资料)
  • 这些问题重要吗?
    • 它们仅在某些情况下才有意义吗?
  • 有哪些解决方法?

EEA*_*EAA 40

尽管许多数据库供应商在这方面做得很慢,但现在几乎所有供应商都正式支持在虚拟化环境中运行的软件。

我们在 ESXi 之上的 linux 中运行了许多 Oracle 11g 实例,当然可以获得非常好的性能。与所有硬件扩展一样,您只需要确保虚拟化主机拥有充足的资源(RAM、CPU),并且您的磁盘层能够满足提供您需要的任何 IO 性能的任务。

  • “一盎司的测试胜过一磅的猜测。” (10认同)
  • +1 如前所述,至关重要的是资源能够胜任任务。磁盘一直是我们最大的瓶颈,需要仔细规划。 (7认同)
  • 绝对磁盘 IO 是罪魁祸首,而虚拟化环境往往会不稳定。 (5认同)
  • +1 您需要提前对数据库**使用**做功课。如果您的物理盒子的利用率超过 40%,那么您对其进行虚拟化的优势就会开始消失。话虽如此,我们在 vm 上运行了大量特定于应用程序的小型独立 sql,没有任何问题。但是由于缺乏优势,我们的大型重用机器具有专用硬件。 (2认同)

squ*_*man 21

正如 ErikA 所说,这正变得越来越普遍。我在 SQL Server 阵营中并且个人没有在 VM 中运行任何生产系统,但我不会犹豫(在对该主题进行更多研究之后)。不过(至少对于 SQL Server),在沿着这条路走之前,肯定有一些事情需要考虑。磁盘 IO(正如其他人提到的)和内存分配只是两个例子。不同的管理程序之间的情况也会有所不同。

Brent Ozar 是公认的 SQL Server 虚拟化专家,尤其是 VMWare。我强烈建议通读他的材料。

http://www.brentozar.com/community/virtualization-best-practices/


小智 11

可以,然后有应该。护卫舰的时速可以达到 150 英里,但您应该在公共高速公路上行驶吗?您可能会不必要地伤害自己。

数据库是客户操作系统。根据设计,当他们开始时,他们会抓取资源块并出于性能原因直接管理它。一旦您将数据库服务器的核心操作系统作为虚拟主机环境中的来宾,您就会在磁盘和 RAM 的块分配元素与数据库服务器之间放置一个带有管理程序的仲裁层。它会变慢。您的查询效率越低,速度就越慢。这些低效率今天可能会在专用硬件上被掩盖,但是一旦您将仲裁引入您的依赖资源,您就会很快发现。

许多要求虚拟化的 bean 计数器未能认识到,数据库服务器作为客户操作系统,提供了自己的整合层。没有理由不能在一台物理服务器上移动合并多个逻辑数据库实例,甚至移动 IP 地址、设置其他主机名等,以允许这种自然的服务合并发生。而且,使用此模型,您不仅可以保留管理层为减少物理主机数量而推动的成本节约,而且可以保留对物理资源的块访问,而不受任意虚拟机管理程序的影响,这有时可以做出有益的决策,而不能其他。

这同样适用于其他客户操作系统,如 Java。虚拟化解决方案通常是繁忙的环境,管理程序必须就谁“获得资源的令牌”做出大量决定。任何时候你可以消除那一层,你会变得更好。

首先使用自然来宾操作系统层合并多个实例。很有可能您将能够更轻松地实现平台整合和性能目标。

  • 明确地说,我完全同意一个微调的、大量繁忙的、高性能的数据库服务器应该有自己的物理硬件。但这些都不是常态,虚拟化的其他好处往往超过性能损失,这与大多数工作负载无法区分。 (5认同)
  • “来宾操作系统”的有趣定义。虽然您的观点是关于纯粹、纯粹的性能,但您的数据库在 CPU 上真正出现瓶颈的频率有多高?I/O 的可能性更大,对于更高性能的应用程序,您已经在 SAN 上共享 I/O 时间。当一个应用程序的安全问题危及所有统一数据库的密码哈希时,或者当在 JVM 中运行的一个进程消耗了可用堆空间的每一字节时,我希望您重新考虑您的虚拟化理念。 (4认同)
  • 我不同意您关于始终首先转到现有合并层的观点。有时这是有道理的。但是,例如,看看在单个操作系统上整合多个数据库和在虚拟机管理程序之上整合多个数据库/操作系统组合之间重新平衡资源的成本权衡。第一个效率更高。第二个更容易重新平衡。与将数据库迁移到新操作系统相比,将操作系统/数据库迁移到新主机的破坏性要小得多。 (3认同)

Joe*_*oel 6

这里有两件事需要意识到:

  • 对于虚拟化数据库,每单位硬件的数据库性能单位略低。这意味着您需要购买更多硬件才能获得相同级别的性能。
  • 这并不意味着无法获得相同的水平或所需的性能水平。您从改进的管理和其他好处(如更简单的 HA)中获得的收益通常远远超过硬件成本的略微增加。

也就是说,在我工作的地方,我们的 Sql Server 安装是仅有的两台我无意虚拟化的服务器之一(另一台是主 DC)。