Sysbench OLTP:MySQL-5.6 vs. MariaDB-10.0
Oracle 现已发布 MySQL-5.6.10-GA,所以是时候推出一些新的基准测试结果了。本次基准测试的候选者是
- MySQL-5.5.29
- MySQL-5.6.10
- MariaDB-5.5.28a
- MariaDB-10.0.1
纳入 5.5 版本是因为我想检查是否存在任何性能退步。过去我们经常看到新版本因引入新功能而导致性能退步。
这次基准测试是在另一台机器上运行的。主要区别在于这台机器没有固态硬盘 (SSD),但有一个高性能的 RAID-5,带有 512M 的电池备份缓存。除此之外,这台机器有 16 个核心,其中 12 个用于 mysqld,另外 4 个用于 sysbench。
基准测试使用 sysbench-0.5 OLTP,包含 8 个表和 10G 数据。InnoDB 缓冲池为 16G,InnoDB 日志组容量为 4G(MySQL-5.5 的最大值)。不同的磁盘系统需要不同的 InnoDB 配置
- innodb_io_capacity = 1000 (SSD 时为 20000)
- innodb_flush_neighbors = 1 (SSD 时为 0)
现在来看结果。首先是 OLTP 只读测试
这是第一个惊喜:MySQL-5.6 的表现显著不同。在线程数达到 8 个时,它表现良好,甚至在 16 个线程时也优于对手。但在更高的并发性下,性能迅速下降,甚至比 MySQL-5.5 还要差。MariaDB-10.0 与 MariaDB-5.5 相比性能也有轻微下降,但不太明显。
响应时间图表虽然很平滑
MySQL-5.6 和 MariaDB-10.0 的表现都略好一些,这意味着它们在并发请求下更均匀地分配 CPU 周期。
免责声明:本次基准测试未使用线程池。Oracle 的线程池实现是闭源的,因此无法进行基准测试或供任何人使用。在这种情况下使用 MariaDB 线程池似乎有点不公平。
如果您想了解 MariaDB 线程池的影响,请参阅之前发布的基准测试
下一站:OLTP 读/写
情况非常相似。与 5.5 版本相比,MySQL-5.6 和 MariaDB-10.0 的性能都有所下降。对于 MySQL 来说,下降幅度超过 10%,相当严重。
然而,众所周知,在 InnoDB 开始同步刷新时,MySQL-5.5 在高负载下会表现出严重的写入停顿。响应时间图表很适合发现这一点
这是个好消息。虽然 5.5 版本在 64 个线程及以上时都显示出严重的写入停顿,但 MySQL-5.6 和 MariaDB-10.0 的表现则轻微得多。因此,新的自适应刷新算法似乎工作良好。
然而这里有一个问题:如果您使用多个缓冲池实例,那么您会更频繁地看到写入停顿。对于上述结果,我使用 16 个缓冲池运行了只读测试,而读写测试只使用了 1 个。
结论
- MySQL-5.6 显示出相当严重的性能退步,特别是在较高并发级别下。这与 Oracle 发布的结果不符。我只能猜测结果为何如此不同,但我猜是因为(闭源的)线程池,也可能是因为 Oracle 的基准测试是在大得多的硬件上进行的。
- 使用单个缓冲池时,您不必再担心写入停顿。此外,MySQL-5.6 现在允许高达 512G 的 redo log 容量,这进一步降低了遇到同步刷新的可能性(MariaDB-5.5 在 XtraDB 中已经解除了这个限制)
一如既往,基准测试所使用的脚本以及结果都可以在 launchpad 获取
http://bazaar.launchpad.net/~ahel/maria/mariadb-benchmarks/revision/20
我邀请任何人重新运行此基准测试并分享结果。
感谢分享这篇非常有趣的文章。
我想评论一下您这句话
“但我猜是因为(闭源的)线程池,也可能是因为 Oracle 的基准测试是在大得多的硬件上进行的。”
是的,这也是我的看法。我必须补充一点,软件通常应该在“普通”,即终端用户硬件上进行基准测试、测试和开发。MySQL 既可以在小型 VPS 上运行,也可以在大型 RootServer 上运行,但我猜大多数人并没有那些未来的 Oracle 测试服务器。
您怎么看?谢谢!
与 http://dimitrik.free.fr/blog/archives/2013/02/mysql-performance-mysql-56-vs-mysql-55-vs-mariadb-55.html 相比,为什么差异如此巨大?
乔治,阿克塞尔邀请大家重新运行基准测试。我知道你也在跑基准测试,所以也许你可以跑一下,然后看看你的结果更像阿克塞尔的还是更像迪米特里的。
您使用的机器规格是什么?
当您写“16 个核心”时,您是指 16 个 CPU 核心还是 8 个 CPU 核心,每个核心带有 2 个超线程?
你好 Andy,我用于测试的机器有 8 个物理核心(两个四核 Xeon),并且启用了超线程。
@neorabbit:disqus
用于此基准测试的机器有 8 个物理核心并启用了超线程。
您是否也可以运行一个 MySQL Java 连接器 vs. Maria DB Java 连接器的基准测试?
提前感谢!