本文介绍基于YCSB(Yahoo! Cloud Serving Benchmark)对PolarDB MySQL版文档数据库(兼容MongoDB协议)能力的性能测试结果,包括加载数据、纯读、读写混合和纯写等多种场景下的QPS与延迟指标。
测试环境
本次性能测试使用的环境配置如下表所示。
|
项目 |
配置 |
|
PolarDB集群 |
引擎为MySQL 8.0.2,集群版系列,集群规格为 |
|
测试客户端 |
阿里云ECS实例,规格为 |
测试工具
本次测试使用YCSB(Yahoo! Cloud Serving Benchmark)作为基准测试工具。YCSB是一款广泛使用的键值存储性能测试框架,支持多种数据库引擎,能够模拟真实业务场景下的读写负载。
测试数据模型为每条文档包含10个字段,每个字段100字节,单条文档大小约为1 KB。
性能测试
测试场景
本次性能测试涵盖以下四种场景。
|
场景 |
读写比例 |
说明 |
|
加载数据(Load) |
纯写入 |
将测试数据批量加载到数据库中。 |
|
纯读(Read Only) |
读:写 = 100:0 |
所有请求均为读操作,用于评估纯读场景下的吞吐量和延迟。 |
|
读写混合(Read/Write Mix) |
读:写 = 50:50 |
读操作和写操作各占50%,用于评估混合负载下的性能表现。 |
|
纯写(Write Only) |
读:写 = 0:100 |
所有请求均为写操作,用于评估纯写场景下的吞吐量和延迟。 |
测试指标
本次测试使用以下指标衡量性能表现。
|
指标 |
说明 |
|
QPS |
每秒处理的请求数(Queries Per Second),数值越高表示吞吐量越大。 |
|
RAL(ms) |
读操作平均延迟(Read Average Latency),单位为毫秒,数值越低表示读操作响应越快。 |
|
WAL(ms) |
写操作平均延迟(Write Average Latency),单位为毫秒,数值越低表示写操作响应越快。 |
测试结果
下表展示了不同线程数和场景下的性能测试结果。
|
测试场景 |
线程数 |
QPS |
RAL(ms) |
WAL(ms) |
|
加载数据 |
32 |
21,020.8 |
- |
1.94 |
|
纯读(r:w=100:0) |
16 |
56,722.7 |
0.27 |
- |
|
32 |
115,369.5 |
0.27 |
- |
|
|
读写混合(r:w=50:50) |
16 |
29,225.7 |
0.32 |
0.76 |
|
32 |
41,533.0 |
0.39 |
1.14 |
|
|
纯写(r:w=0:100) |
16 |
18,455.8 |
- |
0.86 |
|
32 |
25,791.0 |
- |
1.23 |
-
纯读场景下,QPS随线程数增加近线性增长,32线程时达到115,369.5 QPS,读延迟稳定在0.27 ms。
-
读写混合场景下,读延迟和写延迟均保持在较低水平,整体性能表现均衡。
-
纯写场景下,32线程时QPS可达25,791.0,写延迟为1.23 ms。
测试命令参考
以下为YCSB测试中使用的命令示例。您可以根据实际需要调整参数值。
-
加载数据
./bin/ycsb load mongodb -s \ -p workload=site.ycsb.workloads.CoreWorkload \ -p recordcount=10000000 \ -p mongodb.url="mongodb://<user>:<password>@<endpoint>:<port>/<db>" \ -p core_workload_insertion_retry_limit=3 \ -threads <线程数> -
运行测试
./bin/ycsb run mongodb -s \ -p workload=site.ycsb.workloads.CoreWorkload \ -p recordcount=10000000 \ -p operationcount=10000000 \ -p insertproportion=0 \ -p readproportion=<读比例> \ -p updateproportion=<写比例> \ -p mongodb.url="mongodb://<user>:<password>@<endpoint>:<port>/<db>" \ -threads <线程数>
测试命令中的参数说明如下表所示。
|
参数 |
说明 |
|
|
文档数据库的连接地址。请将 |
|
|
加载阶段的总记录数。 |
|
|
压测阶段的总操作数。 |
|
|
读操作的比例。纯读场景设置为100,纯写场景设置为0,读写混合场景设置为50。 |
|
|
写操作的比例。纯写场景设置为100,纯读场景设置为0,读写混合场景设置为50。 |
|
|
并发线程数,本次测试分别使用16和32线程。 |