MariaDB-5.3.4 基准测试
上周末,来自 Percona 的 Vadim 发布了他的MariaDB 5.3.4 基准测试结果。作为 Monty Program 新的基准测试人员,我借此机会补充一些我自己的结果。
Vadim 评论中的一个问题是,将 MariaDB-5.3 与 MySQL-5.5 进行比较是否公平。或者,是否应该与 MySQL-5.1 进行比较。答案是:关系不大。MySQL-5.5 和 MySQL-5.1 在 Sysbench OLTP 基准测试中显示出非常相似的结果。
因此,我创建了一个与 Vadims 非常相似的 Sysbench 环境,并测试了以下版本的 MySQL Server
- MariaDB-5.3.4 – Monty Program 的发布候选版本,同时使用 XtraDB 和 InnoDB 插件
- Percona-Server 5.1.61,因为它基于与 MariaDB-5.3 相同的 XtraDB 版本
- Percona-Server 5.5.20 – 当前的 Percona 旗舰版本
- MySQL-5.5.20 – 当前的 Oracle 旗舰版本
结果
确实,MariaDB-5.3.4 的扩展性明显不如 MySQL-5.5.20。然而,Percona-Server 5.1.61 的表现几乎完全相同,而 Percona-Server 5.5.20 仅略好。如果我们使用 InnoDB 插件而不是默认的 XtraDB 运行 MariaDB-5.3.4,那么 MariaDB 将优于 Percona-Server 5.5.20。
因此,我们将在未来版本的 MariaDB 二进制发行版中附带 InnoDB 插件。带有 InnoDB 插件的 MySQL-5.1.61(图表中未显示)介于 MariaDB-5.3.4(InnoDB 插件) 和 MySQL-5.5.20 之间。我们目前正在调查为什么 MySQL-5.1 比 MariaDB-5.3 快,即使使用相同的存储引擎。
请记住,Sysbench 是一个高度合成的基准测试。实际工作负载可能会产生不同的结果。此外,此基准测试使用了固态硬盘。使用旋转磁盘的存储系统可能会早得多达到饱和,然后会使峰值平坦化。
如果我应该得出一个结论,那么我会说,对于最高的并发级别,您应该选择 MySQL-5.5。或者等待 MariaDB-5.5 :)
如果您的工作负载包含复杂(子)查询,那么您可能会从 MariaDB 的新优化器特性中受益更多。如果您正在运行复制,那么带有组提交的 MariaDB 5.3 将大大优于任何其他 MySQL 版本。
基准测试详情:sysbench OLTP 多表。16 个表,每个表 25 万行。20G InnoDB 缓冲池。数据和日志位于 SSD 上。双插槽六核 Xeon,启用 HT(24 个逻辑核心)。您可以下载压缩包,其中包含基准测试脚本、配置和原始结果。
5.5 发布时,Oracle 声称在 sysbench RW 上比 5.1 性能提高 369%,无论是否使用插件。
http://downloads.mysql.com/presentations/mysql-sunday/MySQL_OOW2010_Keynote_Final.pdf
(此处第 16 页)
Percona Server 声称在整体吞吐量上比 MySQL 快 40%,尽管是在不同的基准测试上。
http://www.percona.com/software/percona-server/benchmarks/
这里的结果显示这些都不属实,5.1 和 5.5 性能相似,而 Percona Server 在整体吞吐量上慢了 40%,Percona 的 XtraDB 是导致 MariaDB 变慢的首要因素。
真有趣。
从现在起,我只相信我自己运行的基准测试了。
在这个基准测试中,是否激活了新的 5.5 特性,如多个缓冲池和新的 I/O 线程?
我不知道,我没有看到 Oracle 的 my.cnf 或 sysbench 参数,只看到了图表。
I/O 线程是的(8 个读取器和 8 个写入器)。多个缓冲池没有。
> 这里的结果显示这些都不属实,5.1 和 5.5 性能相似…
369% 我认为是在 1024 个线程下,而这里没有测试。在 256 个线程下,结果似乎相似。
不,实际上这里的第 16 页
http://downloads.mysql.com/presentations/mysql-sunday/MySQL_OOW2010_Keynote_Final.pdf
在 256 个并发客户端下,5.5 大约 4000 TPS,5.1/plugin 大约 2500 TPS,5.1/builtin 大约 1000 TPS。
对于 256 个并发客户端
Percona 白皮书声称在相同 MySQL 版本下快 40% 是基于 SSD 性能的。白皮书明确指出,在旋转磁盘上益处会小得多。
既然这个测试实际上使用了 SSD,那么为什么看不到这 40% 的增益呢?答案是,Percona 添加了针对 SSD 优化的 InnoDB 刷新算法(可能还有其他一些东西),需要专门开启。由于这个测试可能对所有测试使用了相同的配置文件,所以没有受益于这种优化。
Axel 这里没有说明 SSD 是 SAS 连接还是 PCIe 连接 – 这会产生很大的影响。同样不明确的是,这个数据集似乎真的能装进内存?
Percona Server 比对应的 MySQL 版本慢很多似乎非常不可能,这表明此测试存在缺陷。(我没有评论 Vadim 的测试,但同样,该测试中也可能存在一些缺陷。)
确实,没有使用额外的配置来帮助 XtraDB。但另一方面,Vadim 也没有这样做。重新运行基准测试并使用优化的 XtraDB 设置确实会很有趣。
本次测试中使用的磁盘是基于 3 个 SAS SSD 的 RAID0。数据集确实能装进内存(再说一遍:就像 Vadim 的测试一样)。OLTP rw 基准测试写入大量数据。日志是连续 I/O,而检查点则不是。我不记得每秒的 I/O 次数,但我看到磁盘写入速度高达 100M/s。如果想用旋转磁盘来处理这么大的随机写入量,需要相当大的磁盘缓存和/或大量磁盘。
您测试的是 Oracle MySQL Enterprise 版本还是 Community 版本?
本次测试使用了 Oracle 的 Community Server。此外,所有内容均从源代码使用相同的(发布构建)选项编译,以消除编译器和使用的库的任何影响。
在那些测试中没有区别。直到 5.5 版本,Community 和 Enterprise 之间没有功能差异。当线程池成为 GA 版本时,情况将发生变化,因为 Oracle(与 MariaDB 不同)不会将其放入 Community Server 中。
Ilari,这两者是相同的,除了 Enterprise 版本的商业许可。
Marc:从去年开始就不是了。在性能方面,闭源的、Enterprise 独有的线程池插件会带来差异:https://mysqlserver.cn/products/enterprise/scalability.html
值得注意的是,MariaDB 5.5 附带了一个开源版本的线程池 :)
感谢 Axel 您的基准测试,确实非常有趣。MariaDB 5.2.10 在上述比较中如何?我在 KB 上看到了关于如何使用 vanilla InnoDB 插件编译 MariaDB 5.3.3 的新添加内容 http://kb.askmonty.org/en/how-to-compile-mariadb-with-vanilla-xtradb。希望你们能找出如何改进性能,也希望 MariaDB 5.5 尽快到来 :)
MariaDB-5.2、MariaDB-5.3 和 Percona-5.1 的表现几乎完全相同(除了一些统计上的波动)。事实上,这是预料之中的,因为这三个版本都使用了相同的 XtraDB 版本。XtraDB 似乎是这里的限制因素,因为 MariaDB-5.3.4 使用 InnoDB 插件时表现好得多。后一点很奇怪,因为 XtraDB 是基于 InnoDB 插件代码的。
这是关于 vanilla XtraDB,而不是 vanilla InnoDB 插件。MariaDB 源代码包含了 InnoDB 插件,所以任何编译自己二进制文件的人都可以拥有它。只是我们的二进制软件包还没有包含它。
出色的分析和结果展示。在各种规模和负载下提供最佳性能是一个真正的挑战,很高兴看到 MariaDB 未来将包含 InnoDB 插件。正如您所说的“目前”,看到您推荐其他人的产品(MySQL-5.5)也很令人耳目一新。
顺便说一句,MariaDB 的组提交补丁也包含在 Percona Server 5.5 中。