测试方法

最近更新时间:2024-06-21 11:15:11

我的收藏
本文介绍应用 YCSB 对腾讯云数据库 MongoDB 进行性能测试的完整过程。

测试目标

说明:
MongoDB 数据结构灵活,使用场景复杂多变,很难覆盖到所有场景,最终性能表现建议根据业务实际模型进行测试。
对不同规格的 MongoDB 实例进行性能测试,包含2核4GB、4核8GB、6核16GB等。测试性能指标主要包含 throughput(ops/sec)每秒操作数、RAL(us) 平均读时延、WAL(us) 平均写时延等。
每一种实例规格测试场景如下所示:
50% read + 50% update:读更新比例依次为50%与50%。
95% read + 5% update:读更新比例依次为95%和5%。
5% read + 95% update:读更新比例依次为5%和95%。
100% insert:仅写入数据。
100% read:仅读取数据。
100% update:仅更新数据。

测试步骤

步骤1:远程连接 CVM 实例,下载 YCSB 工具。

1. 使用标准登录方式登录 CVM 实例。具体操作,请参见 登录服务器
2. 在 CVM 上进行 YCSB 下载

步骤2:加载基础测试数据至 MongoDB 数据库

使用 nohup 命令,在后台运行 YCSB 工具,使用配置文件 workloada,连接到指定的 MongoDB 集群,以同步模式加载数据到 test 集合中,并将输出记录到 loadlog.txt 文件中。具体参数解释如下所示。
执行命令分解
解释说明
nohup
Linux 命令通常用于运行需要长时间执行的后台进程,确保这些进程不会因为用户的注销或终端的关闭而中断。
./ycsb-0.17.0/bin/ycsb
YCSB 可执行文件路径。
load
YCSB 的子命令,用于加载数据到数据库。
mongodb
指定要加载的数据库类型 MongoDB。
-s
指定同步模式,即加载操作将在所有操作完成后才返回。
-P workloads/workloada
指定要使用的 YCSB 工作负载配置文件,此处为 workloada。
-p mongodb.url=mongodb://mongouser:password@10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0
指定 MongoDB 的连接 URL 地址。
连接字符串包括用户名、密码、服务器地址和端口号。
w = 0表示写操作不需要确认,即不需要等待写操作的响应。
-p table=test
指定在 MongoDB 中使用的集合名称为 test。
-threads 300
指定用于执行加载操作的线程数量,该示例为300。每一种实例规格对应测试的执行线程数不同。具体信息,请参见 测试结果
-p recordcount=10000000
指定要加载的记录总数。该示例为 1000 万条。每一种实例规格对应测试的数据记录总数不同,具体信息,请参见 测试结果
>loadlog.txt &
将命令的输出重定向到 loadlog.txt 文件,并且使用 & 将命令放入后台执行。
nohup ./ycsb-0.17.0/bin/ycsb load mongodb -s -P workloads/workloada
-p mongodb.url=mongodb://mongouser:password@10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -threads 300 -p recordcount=10000000>loadlog.txt &

步骤3:运行脚本,进行压测。

50%update+50%read

执行总共10,000,000次操作,其中50%为读取操作,50%为更新操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。其中,关键配置参数如下:
-p table=test: 指定在MongoDB中使用的集合名称。
-p recordcount=10000000: 指定数据库中记录的总数。
-p readproportion=0.5: 指定读取操作所占的比例,此处为50%。
-p updateproportion=0.5: 指定更新操作所占的比例,此处为50%。
-p insertproportion=0: 指定插入操作所占的比例,此处为0%,即不执行插入操作。
-p operationcount=100000: 指定要执行的操作总数。
-threads 100: 指定用于执行操作的线程数量。
>runlog.txt &: 将命令的输出重定向到 runlog.txt 文件,并且使用&将命令放入后台执行。
说明:
测试不同的实例规格,recordcount、operationcount、threads 均有差异。具体数据,请参见 测试结果
-p operationcount=100000根据具体执行时间动态调整,需要保证执行时间在二十分钟以上,否则时间过短没有代表性。
?w=0中的 w 表示 write concern。MongoDB写操作的确认级别,设置为0,表示写操作不需要等待服务器的确认。
w:1(应答式写入)要求确认操作已经传播到指定的单个 mongod 实例或副本集主实例,缺省为1。
w:0(非应答式写入)不返回任何响应,所以无法知道写入是否成功,但对于尝试向已关闭的套接字写入或者网络故障会返回异常信息。
w:>1 该值用于设定写入节点的数目,包括主节点。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.5 -p updateproportion=0.5 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

95% update + 5% read

执行总共10,000,000次操作,其中95%为更新操作,5%为读取操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.05 -p updateproportion=0.95 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

5%update + 95%read

执行总共10,000,000次操作,其中5%为更新操作,95%为读取操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.95 -p updateproportion=0.05 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

100%insert

执行总共10,000,000次操作,100%插入操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadb -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0 -p updateproportion=0 -p insertproportion=1 -p operationcount=10000000 -threads 100 >runlog.txt &

100% read

执行总共10,000,000次操作,100%读操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadc -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=1 -p updateproportion=0 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

100% update

执行总共10,000,000次操作,100% Update 操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadb -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0 -p updateproportion=1 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

步骤4:获取测试数据

腾讯云 MongoDB 测试了 4.0、4.4版本,云盘版与物理版,不同实例规格的性能数据,具体测试结果,请参见 测试结果