Mongodb使用YCSB性能压测

database

二、环境说明

1、MongoDB集群配置(一个分片的shard集群)

2、MongoDB版本

4.0.4-62-g7e345a7
4、系统及内核版本

CentOS Linux release 7.5.1804 (Core)

3.10.0-862.14.4.el7.x86_64

3、YCSB版本

YCSB-0.16.0-RC1.

4、测试说明

三、安装

1、jdk及maven安装参考官方

https://github.com/brianfrankcooper/YCSB/tree/master/mongodb

2、安装YCSB

wget https://github.com/brianfrankcooper/YCSB/archive/0.16.0-RC1.tar.gz

tar -zxvf YCSB-0.16.0-RC1.tar.gz

cd YCSB-0.16.0-RC1/

mvn clean package -Dmaven.test.skip=true

PS:
安装过程中maven下载依赖需要×××,如果有安装失败的包,需要在能×××的服务器上下载手动安装,比如mongodb-async-driver-2.0.1.jar就需要×××,下面是手动安装方法
A、手动下载jar包
wget http://www.allanbank.com/repo/com/allanbank/mongodb-async-driver/2.0.1/mongodb-async-driver-2.0.1.jar
B、加压包,从pom.xml 文件里面查看groupId、artifactId、version
C、手动安装

mvn install:install-file -Dfile=/tmp/mongodb-async-driver-2.0.1.jar  -DgroupId=com.allanbank -DartifactId=mongodb-async-driver -Dversion=2.0.1 -Dpackaging=jar

mvn -pl com.yahoo.ycsb:mongodb-binding -am clean package

四、压测

1、编写压测文件

在workloads目录下有很多压测文件用到的文件,我们从其中一个copy一份,编辑添加我们自己定义的内容

vim workloads/2000w

ongodb.url=mongodb://root:123456@172.21.244.101:27000

mongodb.writeConcern=normal

table=chj_2000w

recordcount=20000000

operationcount=50000000

readallfields=true

readproportion=0

updateproportion=0

scanproportion=0

insertproportion=1

requestdistribution=zipfian

workload=com.yahoo.ycsb.workloads.CoreWorkload

关于YCSB的压测文件的每个参数的解释如下:

fieldcount: 每条记录字段个数 (default: 10)

fieldlength: 每个字段长度 (default: 100)

readallfields: 是否读取所有字段true或者读取一个字段false (default: true)

readproportion: 读取作业比例 (default: 0.95)

updateproportion: 更新作业比例 (default: 0.05)

insertproportion: 插入作业比例 (default: 0)

scanproportion: 扫描作业比例 (default: 0)

readmodifywriteproportion: 读取一条记录修改它并写回的比例 (default: 0)

requestdistribution: 请求的分布规则 uniform, zipfian or latest (default: uniform)

maxscanlength: 扫描作业最大记录数 (default: 1000)

scanlengthdistribution: 在1和最大扫描记录数的之间的分布规则 (default: uniform)

insertorder: 记录被插入的规则ordered或者hashed (default: hashed)

operationcount: 执行的操作数.

maxexecutiontime: 执行操作的最长时间,当然如果没有超过这个时间以运行时间为主。

table: 测试表的名称 (default: usertable)

recordcount: 加载到数据库的纪录条数 (default: 0)

2、造数据,也是测写入性能

./bin/ycsb load mongodb -threads 100 -P workloads/2000w
输出结果说明

[OVERALL], RunTime(ms), 37182  #数据加载所用时间(毫秒)

[OVERALL], Throughput(ops/sec), 13447.367005540314 #加载操作的吞吐量(ops/sec)

[TOTAL_GCS_PS_Scavenge], Count, 37

[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 146

[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.3926631165617772

[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, 37

[TOTAL_GC_TIME], Time(ms), 146

[TOTAL_GC_TIME_%], Time(%), 0.3926631165617772

[CLEANUP], Operations, 64

[CLEANUP], AverageLatency(us), 422.09375

[CLEANUP], MinLatency(us), 0

[CLEANUP], MaxLatency(us), 26911

[CLEANUP], 95thPercentileLatency(us), 3

[CLEANUP], 99thPercentileLatency(us), 30

[INSERT], Operations, 500000 # 执行insert操作的总数

[INSERT], AverageLatency(us), 4658.931652 # 每次insert操作的平均延时(微秒)

[INSERT], MinLatency(us), 831 # 所有insert操作的最小延时(微秒)

[INSERT], MaxLatency(us), 1784831 # 所有insert操作的最大延时(微秒)

[INSERT], 95thPercentileLatency(us), 9711 # 95%的insert操作延时在9毫秒以内

[INSERT], 99thPercentileLatency(us), 17903 # 99%的insert操作延时在17毫秒以内

[INSERT], Return=OK, 500000

3、压测

通过调整压测文件中read和update的比例,模拟只读和读写混合的操作

./bin/ycsb run mongodb -threads 100 -P workloads/2000w

[OVERALL], RunTime(ms), 1735408

[OVERALL], Throughput(ops/sec), 2881.1668495247227

[TOTAL_GCS_PS_Scavenge], Count, 3975

[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 6180

[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.3561122226012557

[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, 3975

[TOTAL_GC_TIME], Time(ms), 6180

[TOTAL_GC_TIME_%], Time(%), 0.3561122226012557

[READ], Operations, 500346

[READ], AverageLatency(us), 2851.9638989819045

[READ], MinLatency(us), 696

[READ], MaxLatency(us), 646655

[READ], 95thPercentileLatency(us), 6991

[READ], 99thPercentileLatency(us), 23103

[READ], Return=OK, 500346

[CLEANUP], Operations, 10

[CLEANUP], AverageLatency(us), 3131.0

[CLEANUP], MinLatency(us), 1

[CLEANUP], MaxLatency(us), 31295

[CLEANUP], 95thPercentileLatency(us), 31295

[CLEANUP], 99thPercentileLatency(us), 31295

[UPDATE], Operations, 4499654

[UPDATE], AverageLatency(us), 3534.2083122391186

[UPDATE], MinLatency(us), 704

[UPDATE], MaxLatency(us), 1078271

[UPDATE], 95thPercentileLatency(us), 11647

[UPDATE], 99thPercentileLatency(us), 27343

[UPDATE], Return=OK, 4499654

五、指标观察

1、服务器指标,主要观察CPU、内存、磁盘IO的利用率和延时,可以通过top、iostat工具查看实时情况
2、MongoDB可以通过mongostat 工具查看实时情况

mongostat的输出说明

inserts:每秒插入次数

query:每秒查询次数

update:每秒更新次数

delete:每秒删除次数

getmore:每秒执行getmore次数

command:每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令

dirty:WiredTiger存储引擎中dirty 数据占缓存百分比

used:WiredTiger存储引擎中引擎使用缓存占百分比

flushs:每秒执行fsync将数据写入硬盘的次数。

vsize:虚拟内存使用量,单位MB

res:物理内存使用量,单位MB

qrw:客户端等待读的长度,队列中的长度

arw:客户端等待写的队列长度

netIn 和 netOut:网络流量,单位是字节 byte

conn:当前连接数

time:时间戳

六、测试结果

更多阅读:

使用ycsb对mongodb做性能测试

 

以上是 Mongodb使用YCSB性能压测 的全部内容, 来源链接: utcz.com/z/532169.html

回到顶部