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 只读测试

20130213-sb-ro-tps

这是第一个惊喜:MySQL-5.6 的表现显著不同。在线程数达到 8 个时,它表现良好,甚至在 16 个线程时也优于对手。但在更高的并发性下,性能迅速下降,甚至比 MySQL-5.5 还要差。MariaDB-10.0 与 MariaDB-5.5 相比性能也有轻微下降,但不太明显。

响应时间图表虽然很平滑

20130213-sb-ro-rt

MySQL-5.6 和 MariaDB-10.0 的表现都略好一些,这意味着它们在并发请求下更均匀地分配 CPU 周期。

免责声明:本次基准测试未使用线程池。Oracle 的线程池实现是闭源的,因此无法进行基准测试或供任何人使用。在这种情况下使用 MariaDB 线程池似乎有点不公平。

如果您想了解 MariaDB 线程池的影响,请参阅之前发布的基准测试

下一站:OLTP 读/写

20130213-sb-rw-tps

情况非常相似。与 5.5 版本相比,MySQL-5.6 和 MariaDB-10.0 的性能都有所下降。对于 MySQL 来说,下降幅度超过 10%,相当严重。

然而,众所周知,在 InnoDB 开始同步刷新时,MySQL-5.5 在高负载下会表现出严重的写入停顿。响应时间图表很适合发现这一点

20130213-sb-rw-rt

这是个好消息。虽然 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

我邀请任何人重新运行此基准测试并分享结果。