使用ycsb对mongo单实例做性能测试
Posted 雅冰石
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ycsb对mongo单实例做性能测试相关的知识,希望对你有一定的参考价值。
本文详细演示在16G,4核cpu配置下用ycsb(版本0.17)对mongo(版本4.0.10)单实例进行性能测试。
测试表数据量:一千万条数据
一 安装ycsb
安装包下载地址:
https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz
tar xfvz ycsb-0.17.0.tar.gz
cd ycsb-0.17.0
二 使用ycsb对mongo做性能测试
2.1 选择合适的workload
CoreWorkload 是与 YCSB 一起分发的标准工作负载包,可以直接使用。特别是,CoreWorkload 定义了读取/插入/更新/扫描操作的简单组合。每个操作的相对频率在参数文件中定义,工作负载的其他属性也是如此。因此,通过更改参数文件,可以执行各种不同的具体工作负载。有关 CoreWorkload 的更多详细信息,请参阅Core Workloads。
2.1.1 workload分类
核心工作负载由六种不同的工作负载组成:
Workload A: Update heavy workload
此工作负载混合了 50/50 的读取和写入。
Workload B: Read mostly workload
此工作负载具有 95/5 的读/写混合。
Workload C: Read only
此工作负载为 100% 读取。
Workload D: Read latest workload
在这个工作负载中,插入新记录,最近插入的记录最受欢迎。应用示例:用户状态更新;人们想阅读最新的。
Workload E: Short ranges
在此工作负载中,查询的是小范围的记录,而不是单个记录。
Workload F: Read-modify-write
在此工作负载中,客户端将读取记录、对其进行修改并写回更改。
2.1.2 验证50/50 的读取和写入
2.1.2.1 配置workload
cd workloads/
mv workloada workloada_bak
vi workloada
mongodb.url=mongodb://账号:密码@192.168.144.252:27017
mongodb.database=ycsb
recordcount=10000000
operationcount=100000
workload=site.ycsb.workloads.CoreWorkload
readallfields=true
readproportion=0.5
updateproportion=0.5
scanproportion=0
insertproportion=0
requestdistribution=zipfian
threadcount=100
fieldlength=200
fieldcount=8
table=testCollection
/*
参数介绍:
mongo.url指定要测试的mongo的地址,账号密码等信息
mongodb.database:要测试的数据库名称
recordcount:最初加载到数据库中的记录数
operationcount:要执行的操作次数
readallfields:查询时读取所有字段
readproportion:读比例
updateprortion:更新的比例
*/
2.1.2.2 加载数据
../bin/ycsb load mongodb -P workloada >a_load.txt
会输出DBWrapper: report latency for each error is false and specific error codes to track for latency are: []
但是没有影响。
查看a_load.txt里的输出信息:
[OVERALL], RunTime(ms), 357121
[OVERALL], Throughput(ops/sec), 28001.713704878737
[TOTAL_GCS_PS_Scavenge], Count, 649
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 1645
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.4606281904452552
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 649
[TOTAL_GC_TIME], Time(ms), 1645
[TOTAL_GC_TIME_%], Time(%), 0.4606281904452552
[CLEANUP], Operations, 100
[CLEANUP], AverageLatency(us), 31.98
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 2895
[CLEANUP], 95thPercentileLatency(us), 4
[CLEANUP], 99thPercentileLatency(us), 18
[INSERT], Operations, 10000000
[INSERT], AverageLatency(us), 3515.3324546
[INSERT], MinLatency(us), 180
[INSERT], MaxLatency(us), 12345343
[INSERT], 95thPercentileLatency(us), 4335
[INSERT], 99thPercentileLatency(us), 14791
[INSERT], Return=OK, 10000000
说明往一个表里插入一千万条数据,用时357秒,平均每秒28001 个操作。
/*
已实验,插入一百万条数据,每秒41637个操作
*/
2.1.2.3 开始读写测试
../bin/ycsb run mongodb -P workloada > a_run.txt
[root@pc4 workloads]# cat a_run.txt
[OVERALL], RunTime(ms), 6905
[OVERALL], Throughput(ops/sec), 14482.259232440261
[TOTAL_GCS_PS_Scavenge], Count, 7
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 89
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 1.2889210716871833
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 7
[TOTAL_GC_TIME], Time(ms), 89
[TOTAL_GC_TIME_%], Time(%), 1.2889210716871833
[READ], Operations, 49966
[READ], AverageLatency(us), 6184.857122843534
[READ], MinLatency(us), 210
[READ], MaxLatency(us), 685567
[READ], 95thPercentileLatency(us), 16703
[READ], 99thPercentileLatency(us), 25183
[READ], Return=OK, 49966
[CLEANUP], Operations, 100
[CLEANUP], AverageLatency(us), 32.68
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 3117
[CLEANUP], 95thPercentileLatency(us), 3
[CLEANUP], 99thPercentileLatency(us), 9
[UPDATE], Operations, 50034
[UPDATE], AverageLatency(us), 6088.497821481393
[UPDATE], MinLatency(us), 188
[UPDATE], MaxLatency(us), 681983
[UPDATE], 95thPercentileLatency(us), 16751
[UPDATE], 99thPercentileLatency(us), 25327
[UPDATE], Return=OK, 50034
说明在读写比例一样的情况下,对一千万条数据的表执行十万个操作,吞吐量是14482。
/*
已实验,对一百万条的表执行十万个操作(读写比例50/50),平均每秒18921个操作
*/
2.1.3 验证95/5的读/写混合
2.1.3.1 配置workload
mv workloadb workloadb_bak
vi workloadb
mongodb.url=mongodb://账号:密码@192.168.144.252:27017
mongodb.database=ycsb
recordcount=10000000
operationcount=100000
workload=site.ycsb.workloads.CoreWorkload
readallfields=true
readproportion=0.95
updateproportion=0.05
scanproportion=0
insertproportion=0
requestdistribution=zipfian
threadcount=100
fieldlength=200
fieldcount=8
table=testCollection
2.1.2.2 开始读写测试
../bin/ycsb run mongodb -P workloadb > b_run.txt
[root@pc4 workloads]# cat b_run.txt
[OVERALL], RunTime(ms), 6799
[OVERALL], Throughput(ops/sec), 14708.045300779526
[TOTAL_GCS_PS_Scavenge], Count, 7
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 81
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 1.1913516693631416
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 7
[TOTAL_GC_TIME], Time(ms), 81
[TOTAL_GC_TIME_%], Time(%), 1.1913516693631416
[READ], Operations, 94968
[READ], AverageLatency(us), 6000.804860584618
[READ], MinLatency(us), 206
[READ], MaxLatency(us), 780287
[READ], 95thPercentileLatency(us), 22079
[READ], 99thPercentileLatency(us), 35039
[READ], Return=OK, 94968
[CLEANUP], Operations, 100
[CLEANUP], AverageLatency(us), 32.84
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 3101
[CLEANUP], 95thPercentileLatency(us), 3
[CLEANUP], 99thPercentileLatency(us), 14
[UPDATE], Operations, 5032
[UPDATE], AverageLatency(us), 6271.118243243243
[UPDATE], MinLatency(us), 261
[UPDATE], MaxLatency(us), 759295
[UPDATE], 95thPercentileLatency(us), 22303
[UPDATE], 99thPercentileLatency(us), 37087
[UPDATE], Return=OK, 5032
说明在读写比例为95/5的情况下,对一千万条数据的表执行十万个操作,吞吐量是14708。
/*
已实验,对一百万条的表执行十万个操作(读写比例95/5),平均每秒24654个操作
*/
2.2 测试结论
2.2.1 测试数据
2.2.2 测试结论
实验发现,操作系统的硬件配置很影响测试结果,配置越高,OPS越高。
操作数据量小的表,OPS更高。
2.3 官方测试报告
其硬件配置如下:
- CPU: 2x Deca Core Xeon 2690 V2 – 3.00GHz (Ivy Bridge) – 2 x 25MB cache
2、 RAM: 128 GB Registered DDR3 1333
3、 Storage: 2x 960GB SSD drives, SATA Disk Controller
4、 Network: 10 Gbps
5、 Ubuntu 14.10 (64 bit)
6、 MongoDB Versions: MongoDB 2.6.7; MongoDB 3.0.1
2.4 备注
2.4.1 验证分片集群性能步骤
sh.enableSharding("ycsb")
sh.shardCollection("ycsb.testCollection", _id:"hashed")
../bin/ycsb load mongodb -P workloada >a_load.txt
../bin/ycsb run mongodb -P workloada > a_run.txt
../bin/ycsb run mongodb -P workloadb > b_run.txt
本篇文章参考了
GitHub - brianfrankcooper/YCSB: Yahoo! Cloud Serving Benchmark
Running a Workload · brianfrankcooper/YCSB Wiki · GitHub
Core Workloads · brianfrankcooper/YCSB Wiki · GitHub
高性能mongodb之使用ycsb进行性能测试_a172742451的专栏-CSDN博客_mongodb性能测试工具
使用YCSB测试MongoDB的微分片性能 | MongoDB中文社区
MongoDB 3.0 官方性能测试报告(I):YCSB测试下的并发量提升 | MongoDB中文社区
以上是关于使用ycsb对mongo单实例做性能测试的主要内容,如果未能解决你的问题,请参考以下文章