最近接到一个活需要对mongodb数据库的写入进行性能测试,之前从未接触过这方面的东西,经过一番搜索后发现了YCSB(全称为Yahoo! Cloud Serving Benchmark,github地址GitHub - brianfrankcooper/YCSB: Yahoo! Cloud Serving Benchmark),该性能测试工具由Java语言编写,主要用于云端或者服务器端的数据库性能测试工具,其内部涵盖了常见的NoSQL数据库产品,如Cassandra、MongoDB、HBase、Redis等等,在此记录一下过程

1.环境搭建

YCSB需求的环境为:

  • Java
  • Maven
  • Python2(一定要使用python2,YCSB不支持python3)

首先安装java

sudo apt install openjdk-11-jdk

安装maven

sudo apt install maven

安装python2并设置为默认版本

sudo apt-get install python2
sudo ln -s /usr/bin/python2.7 /usr/bin/python

下载YCSB并解压

wget 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

2.测试

在ycsb目录下有workloads目录,该目录下有workloada、workloadb、workloadc等几个预设测试场景,分别为:

  • workloada:读写均衡型,50%/50%,Reads/Writes
  • workloadb:读多写少型,95%15%,Reads/Writes
  • workloadc:只读型,100%,Reads
  • workloadd:读最近写入记录型,95%15%,Reads/insert
  • workloade:扫描小区间型,95%/5%,scan/insert
  • workloadf:读写入记录均衡型,50%/50%,Reads/insert

其中的参数含义为

参数 含义
recordcount=1000 YCSB load(加载元数据)命令的参数,默认值1000表示默认加载的记录条数,可以在命令行显示修改该值
operationcount=1000 YCSB run(运行压力测试)命令的参数,默认值1000表示默认选取数据库中的1000条数据进行压力测试。对于workloada这种测试场景,就意味着读数据在500左右,写数据也在500左右
workload=site.ycsb.workloads.CoreWorkload 指定了workload的实现类为 com.yahoo.ycsb.workloads.CoreWorkload
readallfields=true 表示查询时是否读取记录的所有字段
readproportion=0.5 表示读操作的比例,该场景为0.5
updateproportion=0.5 表示更新操作的比例,该场最为0.5
scanproportion=0 表示扫描操作的比例
insertproportion=0 表示插入操作的比例
requestdistribution=zipfian 表示请求的分布模式,YCSB提供uniform,zipfian,latest三种分布模式,Uniform(等概率随机选择记录)、Zipfian(随机选择记录,存在热纪录)和Latest(近期写入的记录是热记录)

可以根据自己的需求去设置测试场景参数,设置好后就可以使用命令去执行了,例如

./bin/ycsb run mongodb -threads 1 -P workloads/workloada -p mongodb.url=mongodb://localhost:27017/test?w=0

命令参数含义

参数 含义
bin/ycsb 命令本身
load/run/shell 指定这个命令的作用,分别代表加载数据/运行测试/交互界面
mongodb/hbase10/ba
sic...
指定这次测试使用的驱动,也就是这次究竟测的是什么数据库,有很多选项,可以ycsb --help看到所有
threads 线程数,模拟客户端数
workloads/workloada 指定测试的参数文件,默认有6种测试模板
-p fieldcount=1 单条记录字段个数:1
-p fieldlength=1024 每个字段的大小:1024Bytes
-p table= 自定义表名
-p clientbuffering=true 客户端写缓存
-p mongodb.url= 指定测试的数据库的认证信息,账号密码,地址端口和库名

执行完成后会输出结果

各行的含义为

参数 说明
RunTime(ms): 运行总时间(毫秒)
Throughput(ops/sec): 吞吐量,每秒操作数
[TOTAL_GCS_PS_Scavenge], Count: Parallel Scavenge 回收次数
[TOTAL_GC_TIME_PS_Scavenge], Time(ms): Parallel Scavenge 回收时间
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%): Parallel Scavenge 回收时间百分比
[TOTAL_GCS_PS_MarkSweep], Count: PS MarkSweep 回收次数
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms): PS MarkSweep 回收时间
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%): PS MarkSweep 回收时间百分比
[TOTAL_GCs], Count: 全局 GC 次数
[TOTAL_GC_TIME], Time(ms): 全局 GC 时间
[TOTAL_GC_TIME_%], Time(%): 全局 GC 时间百分比
Operations 总操作数
AverageLatency(us) 平均延迟(微秒)
MinLatency(us) 最小延迟(微秒)
MaxLatency(us) 最大延迟(微秒)
95thPercentileLatency(us) : 95%的样本延迟低于该值
99thPercentileLatency(us) 99%的样本延迟低于该值
Return=OK   结果(正确),总操作数

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐