5.5 系列 Sysbench OLTP 测试结果

几天前,MariaDB、MySQL 和 Percona 都发布了 5.5 版本服务器的新版本。因此,我决定再次运行 sysbench 并比较 OLTP 性能。测试候选版本如下:

  • MariaDB-5.5.24,使用 XtraDB(默认)或 InnoDB
  • MySQL-5.5.25
  • Percona Server 5.5.24-26.0

为了进行基准测试,我使用了我们可靠的老机器 pitbull,它拥有 24 个 CPU 核心、24G RAM 和一个由 3 块 SAS SSD 组成的不错的 RAID-0 阵列。

基准测试使用的是 sysbench-0.5 多表 OLTP,使用了总计 10G 数据的 8 个表。InnoDB 缓冲池设置为 16G,InnoDB 日志组容量设置为 4G(MySQL 的最大值)。mysqld 进程被限制在 16 个核心上,sysbench 使用其余 8 个核心。

唯一的非标准调优是为了提高 I/O 可伸缩性:innodb_io_capacity = 20000innodb_flush_neighbor_pages = none(针对 Percona Server 和 MariaDB/XtraDB)。请参阅我最近关于 I/O 调优的文章以了解解释。

只读 OLTP 的结果非常均衡。此图显示了中位吞吐量

响应时间也非常平稳(图中显示的是 99% 分位数,意味着最多有 1% 的请求慢于此值)

事实上,其表现显示出几乎完美的伸缩性:在最多 16 个线程(= 分配给 mysqld 的 CPU 核心数)时,响应时间保持不变。在更高的并发下,我们在双对数图上看到一条直线。

对于读写 OLTP,如果我们先看每秒事务数图表,情况看起来非常相似

当我们再次查看响应时间(99% 分位数)时,情况发生了变化。基于 InnoDB 的服务器在接近 16 个客户端线程时,会因检查点机制导致严重的停顿

基于 XtraDB 的服务器由于更好的检查点算法,能够更好地处理写入负载。

结论:如果您的工作负载是偏重于只读的 OLTP,那么选择 MariaDB、MySQL 或 Percona Server 在性能上没有太大区别。因此,您可以根据其他因素做出决定:成本、附加功能(在 MariaDB 和 Percona Server 中)或您的内部技术知识。

基于 InnoDB 的服务器(MySQL,MariaDB 可选)显示出略高的吞吐量,但在高写入负载下会遭遇检查点停顿。MariaDB 在这方面提供了最高的灵活性,因为您可以在 XtraDB 和 InnoDB 之间进行选择。

免责声明:原始基准测试结果以及使用的脚本和配置文件都可以在 Launchpad 上的公共 mariadb-benchmarks 仓库中找到。那里还有额外的图表。