技术译文 | How Can ScaleFlux Handle MySQL Workload?

本文是一篇译文,介绍 Percona 的工程师对 ScaleFlux 的性能压测报告
翻译:杨奇龙
原文地址: https://www.percona.com/blog/...

最近做者有一个针对 ScaleFlux 的产品也叫作 CSD 2000 进行压测的机会. 本文中做者将介绍使用 Intel SSD 和 ScaleFlux 存储设备进行压测的对比结果。mysql

一 咱们为何须要不同的 ScaleFlux?

答案很简单 它为咱们提供了内置的压缩功能和支持原子写特性。对于不少工做场景尤为是数据库类型的业务而言,这些功能和特性很是重要。sql

由于内置的磁盘压缩功能 相同的磁盘容量,咱们能够存储更多的数据在 ScaleFlux 存储设备上。(引伸:大规模数据存储的状况下 耗费的机器数量更少,机架位也更少。)数据库

做者基于不一样的数据集大小,不一样数据库 schema 数据量进行屡次测试。须要说明的是在这些测试场景中我并不打算压测这些卡的性能极限,而是对比相同容量下 ScaleFlux 存储设备和 Intel SSD 的性能表现。缓存

存储设备配置:
ScaleFlux – CSD 2000 4TB
Intel –  P4610 3.2TB

服务器配置:
Application server: Supermicro; SYS-6019U-TN4RT
48xIntel(R) Xeon(R) Gold 6126 CPU @ 2.60GHz
190G RAM
Database Server: Inspur; SA5212M4
32xIntel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
64G RAM

在 Application server 运行 sysbench 压测工具,在 Database Server 运行 Percona Server for MySQL 8.0.19 。服务器

做者禁用了 binary, slow query logging 和 adaptive hash,使用比较小的 BPS 配置,为了减小数据缓存,尽可能让 sql 请求访问磁盘。另外就是测试了关闭和开启 doublewrite 的性能表现 。并发

数据库的配置以下:高并发

innodb_buffer_pool_size=8G
innodb_log_file_size = 2G
max_connections=500
slow_query_log=off
disable_log_bin
innodb_doublewrite=ON/OFF
tmpdir = /var/lib/mysql/
innodb_adaptive_hash_index=off
innodb_flush_method=O_DIRECT
innodb_purge_threads=32
sync_binlog=0
max_prepared_stmt_count=4000000

作了哪些测试

首先做者作了标准的 OLTP read_only, write_only, 和 read-write 测试,而后做者修改分表结构工具

CREATE TABLE `sbtest1` (
  `id` int NOT NULL AUTO_INCREMENT,
  `k` int NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  `data1` varchar(255) DEFAULT NULL,
  `data2` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `k_1` (`k`),
  KEY `idx_data1` (`data1`)
) ENGINE=InnoDB AUTO_INCREMENT=9999948 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

新增长了 data1 和 data2 两个 varchar 字段,使用一本书(Gutenberg project)中的内容行记录进行填充。性能

为何这样作? 由于这也是 ScaleFlux 的优点之处,他们声称若是数据能够被压缩,那么 ScaleFlux 将比 Intel 的性能要好不少。测试

做者还修改了OLTP lua 脚原本适配新的表结构

index_updates = {
      "UPDATE %s%u SET k=?,data1=? WHERE id=?",
      t.INT,{t.CHAR,255},t.INT},

   non_index_updates = {
      "UPDATE %s%u SET c=?,data2=? WHERE id=?",
       {t.CHAR,120},{t.CHAR,255},t.INT},

   inserts = {
      "INSERT INTO %s%u (id, k, c, pad, data1, data2) VALUES (?, ?, ?, ?, ?, ?)",
      t.INT, t.INT, {t.CHAR, 120}, {t.CHAR, 60}, {t.CHAR,255}, {t.CHAR,255}},

   index_selects = {
      "SELECT id,data2 FROM %s%u WHERE data1=?",
      {t.CHAR,255}},

   update_based_on_data1 = {
      "UPDATE %s%u SET data2=? WHERE data1=?",
       {t.CHAR,255},{t.CHAR,255}},

压测的配置以下:

default lua scripts – 100 tables – 10ML rows each – 220G

default lua scripts – 1000 tables – 10ML rows – 2.3T

modified lua scripts – 100 tables – 10ML rows each – 440G

modified lua scripts – 540 tables – 10ML rows each – 2.5T

modified lua scripts – 540 tables – 20ML rows each – 4.7T

talk is cheap,咱们来看看结果对比图吧

Default Sysbench – Read/Write – 220G Datasize

image

在默认配置下,使用 100 张表,每一个表 100w 条记录,数据集大小为 220G。从结果图中咱们能够看到 Intel SSD 略微领先。ScaleFlux 存储设备在并发度为 96 以后有领先的优点。

须要说明都是 ScaleFlux 支持原子写,因此做者关闭了 InnoDB Double Write Buffer。而针对 Intel SSD 不支持原子写,InnoDB Double Write Buffer 是开启的。

Modified Sysbench – Read/Write – 440G Datasize

该场景下,做者使用了添加 2 个字段的压测模型。数据量扩大到 440G,并且使测试数据适合压缩。

image

从压测结果上看,和 ScaleFlux 声明的同样,在数据可压测的状况下,MySQL 在 ScaleFlux 设备上的性能明显优于 Intel SSD ,在高并发场景下,性能优点明显。
再次说明 Intel SSD上的 MySQL 未关闭 InnoDB Double Write Buffer,而是用 ScaleFlux 设备的 MySQL 是关闭了 InnoDB Double Write Buffer 的。

咱们来看一下 Intel SSD 的 MySQL 也关闭 InnoDB Double Write Buffer 的测试结果

image

在同时开启或者关闭 Double Write 特性的对比测试中,是用 ScaleFlux 存储设备的 MySQL 都表现比较明显。

须要注意的是,咱们不推荐在任何不支持原子写的设备上关闭 InnoDB Double Write 。

Modified Sysbench – Read/Write – 2.5T Datasize

image

两个设备都有 3.2T 的存储容量,做者压测的数据使用了 2.5T 。做者使用修改的表结构 重建了 sysbench 的表。从结果上来看 ScaleFlux 存储设备上的 MySQL 性能优点比较明显。一个影响性能的因素是 SSD 存在写放大。当数据量达到必定容量比例,SSD 会进行相似垃圾回收的任务,耗费资源,影响 SSD 的写能力。

Disk Latency

image

从图中能够查看到 ScaleFlux 存储设备 的响应时间很是稳定而 Intel 设备的响应时间则波动比较大。

CPU Usage

ScaleFlux – Read/Write – Modified Sysbench – 540 tables – 2.5T

image

Intel – Read/Write – Modified Sysbench – 540 tables – 2.5T

image

咱们能够看到 Intel 设备的 iowait 比较高 31.52% ,而ScaleFlux 设备的 iowait 则是 11.46%,明显低于 Intel 设备。

Disk Operations

image

从系统层的监控数据来看测试期间的 IOPS 表现。ScaleFlux 存储设备提供更高的 IOPS 大约是 Intel 的 2 倍。 更高的 IOPS 意味着 MySQL 的QPS/TPS 更高,性能更好。下面的图也说明了这一点。

InnoDB Row Operations

image

从上面这张图中咱们看到 Innodb 层的统计数据,每分钟 inserted/updated/deleted 多少行记录。

由于 InnoDB 关闭了 double write,使用 ScaleFlux 存储设备的 MySQL 写性能是 Intel 的接近两倍。

结论

根据做者的测试,ScaleFlux 存储没有半点水分,言行一致。若是数据量越大并且数据的可压缩性越好,性能效果则越好。须要特别说明的是 从第一次测试的结果来看,数据集比较小并且数据不可压缩的状况下 Intel SSD 存储的优点仍是比较明显的(其实价格,也比较低)。

想要获取更详细的压测报告 能够点击原文:https://learn.percona.com/hub...

相关文章
相关标签/搜索