使用 Shannon Systems PCIe 和原子写提高 MariaDB 性能

我们最近有机会测试了 Shannon Direct-IO PCIe Flash G3i 设备如何提高 MariaDB 的性能。任何关心 I/O 性能的人都会注意到,PCIe 驱动器近年来已变得易于获得,并且它们比连接到传统 SATA 端口的普通 SSD 驱动器(更不用说机械硬盘了)快得多。除了是出色的硬件外,Shannon 驱动器还通过提供支持原子写的设备驱动程序提供了额外的提升。这意味着设备保证写入操作能到达驱动器,因此 MariaDB 服务器无需像在普通硬件上那样运行额外的检查。

MariaDB Server 从 2013 年起就支持原子写,并且从 10.2 版本开始,如果 MariaDB 服务器检测到兼容硬件,默认就会启用该功能。我们已经在 2013 年的一篇博客文章中介绍了在部分 SSD 驱动器上进行原子写基准测试的结果,但几年过去了,现在是时候了解当前最先进的硬件情况了。

基准测试设置

在基准测试中,我们使用了 MariaDB 10.1,配置了 16 GB 的 InnoDB 缓冲池,其中包含一个由 16 个表组成的数据库,每个表有 2500 万行。数据库的总大小约为 100GB,远大于 InnoDB 缓冲池所能容纳的大小,因此确保了大部分数据是从驱动器而非仅从 RAM 中读取。我们针对不同数量的线程运行了基准测试,以模拟典型服务器的压力水平。我们测量的唯一变量是每秒事务数,因为这是衡量数据库运行速度的最佳综合指标。

基准测试工具是使用 OTLP 脚本的 sysbench 0.5。确切的命令是

./sysbench -test=lua/oltp.lua --oltp_tables_count=16 --oltp-table-size=25000000 rand-seed=42 --rand-type=uniform --num-threads=$THREADS --oltp-read-only=off --report-interval=5 --mysql-socket=/var/run/mysqld/mysqld.sock --max-time=602 --max-requests=0 --mysql-user=sbtest --mysql-password=salakala --port=9999 --percentile=99 run

使用普通固态硬盘设定基准

为了建立基准,我们测量了使用传统但性能良好的 Samsung PRO SSD 时 MariaDB 服务器的表现。在该系统上,事务处理速率峰值约为每秒 700 次。

请注意,这种曲线趋于平缓的趋势是 MariaDB/MySQL 基准测试中的典型现象,这是由于服务器在使用并发线程和内部锁时在负载下的行为方式所致。

PCIe 硬盘(未启用和启用原子写)

在 PCIe 驱动器上进行的第一次基准测试与在 SSD 上进行的完全相同,但这次 MariaDB 数据目录放置在 Shannon Systems PCIe 驱动器上,并从 /var/lib/mysql 符号链接过去。使用 PCIe 硬盘后,事务率几乎翻倍,峰值约为每秒 1400 次事务。

使用 PCIe 驱动器进行的第二次基准测试通过在 my.cnf 配置文件中设置 innodb_use_atomic_writes = 1 启用了原子写。原子写带来了显著的额外性能提升,事务处理速率 峰值略低于每秒 1700 次。

在另一次额外的基准测试中,我们还通过设置 innodb_checksum_algorithm=none 关闭了 InnoDB 页面校验和。正如预期的那样,这使结果略有改善,但不建议在生产环境中进行此类更改。

将整个数据库放入 RAM

作为最后一次基准测试,我们甚至尝试将整个 /var/lib/mysql 挂载到 tmpfs 上,以便整个数据库完全在 RAM 中运行,不涉及任何硬盘活动。正如预期的那样,这确实进一步提高了性能,但令人惊讶的是提升幅度并不太大。

延迟比较

PCIe 驱动器的延迟非常低,因此除了上面展示的吞吐量外,我们还绘制了 99% 分位数延迟,这显示出明显的 2 倍提升,性能接近 RAM 级别。

大约延迟
99 分位数
SSDPCIePCIe +
原子写
无校验和RAM (tmpfs)
8 线程34 毫秒13 毫秒12 毫秒13 毫秒10 毫秒

请注意,刻度是对数性质的。另请注意,在 16 线程附近存在一些异常,似乎 PCIe 的延迟表现甚至优于纯 RAM。

结论与思考

看来 在 Shannon PCIe 设备上运行 MariaDB 几乎就像将整个数据库放在 RAM 中一样。然而,Shannon Systems 提供的 1.6 TB 或 3.2 TB PCIe 硬盘的价格远低于同等存储容量的 ECC 保护服务器 RAM 芯片的价格。Shannon 甚至提供容量高达 12.8 TB 的 PCIe 驱动器,因此与基于 RAM 的配置相比,其数据密度更优。

这次基准测试的结论是,在 Shannon PCIe 驱动器上运行具有大量读写负载的大型 MariaDB 数据库确实是一个明智之举。