为啥 Mongodb 在 Linux 上的性能比在 Windows 上更好?

Posted

技术标签:

【中文标题】为啥 Mongodb 在 Linux 上的性能比在 Windows 上更好?【英文标题】:Why Mongodb performance better on Linux than on Windows?为什么 Mongodb 在 Linux 上的性能比在 Windows 上更好? 【发布时间】:2014-08-02 09:47:41 【问题描述】:

我创建了一个程序来测试分片 MongoDB 在 Linux(Ubuntu) 和 Windows(Server2008) 上的性能。 由于插入了大量的记录,Windows 的磁盘活动时间非常高(100%),性能非常差。但在 Ubuntu 上,磁盘的 util% 为 60%~70%,性能优于 Windows。 我能说 MongoDB 在 Linux 上的性能更好吗?

【问题讨论】:

这可能有很多不同的原因,不一定与 MongoDB 有任何关系。 这可能是因为 Linux 可能比 Windows 更好或更高效(例如,它的文件系统和文件缓存使其工作得更好) 【参考方案1】:

首先:Windows 2008 服务器上可用的所有文件系统都非常非常低效。与 XFS 或 ext4 相比,当 Windows 和 Linux 文件系统都进行了优化时,它们的速度最高可慢 40%。

第二:延迟可能是个问题。当前 Linux 系统上的网络堆栈简直比 W2008 服务器上的要快。

第三:如果您的机器上运行了防火墙,则延迟成为远程访问的更大问题。虽然 Linux 的 iptables 足够快速和高效,以至于大部分防火墙设备都基于它,但出于各种原因,可用于 Windows 的防火墙却不是。

另外:Windows 在 RAM 上的效率不如 Linux。 MongoDB 使用尽可能多的 RAM(直到它需要的点),例如用于在 RAM 中存储(副本)索引文件。与 Linux 机器相比,Windows 占用的可用 RAM 份额要大得多。因此,从磁盘读取索引文件可能比从 RAM 读取,这要慢几个数量级。

底线:在 Windows 系统上运行生产 mongoDB 是一个非常糟糕的主意。

编辑

根据 cmets 中的要求:

文件系统速度:Comparing Filesystem I/O performance: RedHat Enterprise 6 vs. Microsoft Windows Server 2012 至于 RAM 使用效率低下,您可能需要自己检查一下。给定的 Windows Server 系统在空闲时使用多少 RAM?这与任何给定的 Linux 服务器空闲相比如何?让我们假设 Windows 服务器的 GUI 只需要 128M - 它浪费了 128MB。乘以 20,这不是一个很大的集群大小,我们说的是 2.5 GB——如果不是更多的话,它可以很容易地组成一个配置服务器或仲裁器。对于一个很少需要(如果有的话)的系统来说,这将花在一个 GUI 上。根据确凿的事实,您可能想阅读Comparing CPU and Memory Performance: Red Hat Enterprise Linux 6 vs Windows Server 2012 关于网络栈的速度,有多种来源,这里我倾向于参考两个: Measured Comparative Performance of TCP stacks,老了,但我们说的是数量级,这至少给出了一个想法 Comparing Network Performance: Red Hat Enterprise Linux 6 vs Windows Server 2012

您可能已经认识到我引用了 Principled Technologies 的三份报告。虽然我与他们没有任何关系,但恕我直言,他们通过使用行业标准基准测试并针对相关任务显式优化两个操作系统以及使用开箱即用的操作系统,在比较 RHEL 6 和 Windows Server 2012 方面做得很好。

有人可能会争辩说,这种比较并不能证明所有 GNU/Linux 发行版都比 Windows Server 2012 更快,我们所说的功能是由 Linux 内核提供的,通常不会被摆弄,所以可以安全地假设可以从所有主要分布中预期类似的结果。

凭借 Linux 的部分极端性能优势(Linux 的 TCP 堆栈对于大消息大小几乎是 Windows Server 的 4 倍,这在数据库应用程序中往往是这种情况),我更新了我的断言在 Windows 系统上运行生产 MongoDB 是一个非常糟糕的主意。

【讨论】:

非常感谢~很有帮助~^_^ 您能否提供支持您的比较的参考资料?我的意思是文件系统慢了 40%,网络堆栈慢了,防火墙慢了,Windows 部分的 RAM 使用效率低。 @Iravanchi:完成,希望对您有所帮助。 非常感谢。这真的很有趣。虽然这些报告与 RedHat 有关联,但我想知道微软对此有何评论,或者他们方面的任何类似报告。 @Iravanchi:据我所知,Principled Technologies 是关于基于事实的营销。老实说,我怀疑他们会伪造或偏袒任何报告,因为他们会立即倒闭。【参考方案2】:

可以说 MongoDB 在 Linux 上的性能优于 Windows,因为与许多其他数据库不同,MongoDB 严重依赖操作系统来执行内存映射文件操作,如 here 所述。正如前面的回答中提到的,Windows server 2008 FS 比 Linux FS (ext4) 慢得多,那么 MongoDB 在 Linux 上的性能会比 Windows 更好。这也取决于你是 32 位还是 64 位系统。

【讨论】:

以上是关于为啥 Mongodb 在 Linux 上的性能比在 Windows 上更好?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 C++ 程序在 Windows 上比在 Linux 上慢?

为啥在 Windows 上创建新进程比在 Linux 上更昂贵?

为啥 sift.compute() 在 MSER 关键点上比在 SIFT 关键点上慢

为啥在 GPU 中执行方法的时间比在混合器项目中的 CPU 中执行的时间更多?

在 AIX/bash 上的 bash 循环中读取文件比在 Linux/ksh 中慢得多 - BLOCKSIZE?

c++ Windows 调试性能与 linux 相比非常慢