zoukankan      html  css  js  c++  java
  • YCSB_对mongodb进行性能测试

    1、YCSB介绍

    YCSB,全称为“Yahoo!Cloud Serving Benchmark”,是雅虎开发的用来对云服务进行基础测试的工具,其内部涵盖了常见的NoSQL数据库产品,如Cassandra、MongoDB、HBase、Redis等等。在运行YCSB的时候,可以配置不同的workload和DB,也可以指定线程数&并发数等其他参数。

    2、安装环境

    基于参考文档(https://github.com/brianfrankcooper/YCSB/tree/master/mongodb )安装java,maven,ycsb 

    注意,下面工具均需要根据linux系统类型和位数下载对应的rpm包,否则安装不了。使用uname -m 可查看

    2.1 安装Java

    下载地址:https://www.oracle.com/java/technologies/downloads

    使用命令安装rpm包

    rpm -ivh 包名

     安装后如果想卸载使用命令

    yum remove java -y

    2.2 安装Maven

    下载地址:https://maven.apache.org/download.cgi

    解压工具包

    tar -zxvf apache-maven-3.8.4-bin.tar.gz

    将解压包的bin目录路径添加到环境变量并使修改文件立即生效

    echo 'export PATH=$PATH:/root/apache-maven-3.8.4/bin' >> /etc/profile 
    
    source /etc/profile

    2.3 YCSB

    下载地址:https://github.com/brianfrankcooper/YCSB/releases

    解压安装包

    tar -zxvf ycsb-0.5.0.tar.gz

    到此,环境部署完成!

    输入命令简单验证下环境是否可用

    ./bin/ycsb load mongodb

    正常情况显示下图内容

    3、YCSB主要目录说明

    • bin:目录下有个可执行的ycsb文件,是用户操作的命令行接口。ycsb主逻辑是:解析命令行、设置java环境,加载java-libs,封装成可以执行的java命令,并执行。
    • workloads:目录下有各种workload的模板,可以基于workload模板进行自定义修改。
      默认的6种测试场景如下:
      1)workloada:读写均衡型,50%/50%,Reads/Writes
      2)workloadb:读多写少型,95%/5%,Reads/Writes
      3)workloadc:只读型,100%,Reads
      4)workloadd:读最近写入记录型,95%/5%,Reads/insert
      5)workloade:扫描小区间型,95%/5%,scan/insert
      6)workloadf:读写入记录均衡型,50%/50%,Reads/insert

    4、YCSB主要参数说明

    命令参数

    假如处于ycsb工具目录下,命令格式如下:

    ./bin/ycsb command database [options]
    • command:常用 load(用于压测前的数据准备)和 run(执行压测) 
    • database:压测数据库名称
    • options:-P(指定workload文件)-p key=value(覆盖workload中属性)-threads (进程数)-s(执行过程中是否打印状态信息)

    workload属性参数

    • recordcound:load阶段加载到数据库的纪录条数 (default: 0) ,run阶段操作的数据范围(注:run阶段该值不能大于load阶段的值,否则会出现 Nothing updated for key的错误,该错误会影响update操作的正确性)
    • operationcount:run阶段执行的操作总数
    • readallfields:查询时是否读取所有字段true或者读取一个字段false(default: true)
    • fieldcount: 每条记录的字段个数 (default: 10)
    • fieldlength: 每个字段的数据长度 (default: 100)
    • readproportion: 读操作比例 (default: 0.95)
    • updateproportion: 更新操作比例 (default: 0.05)
    • insertproportion: 插入操作比例 (default: 0)
    • insertstart:第一个插入值的偏移量(default: 0)
    • scanproportion: 扫描作业比例 (default: 0)
    • readmodifywriteproportion: 读取一条记录修改它并写回的比例 (default: 0)
    • requestdistribution: 请求的分布规则 uniform, zipfian or latest (default: uniform)
    • mongodb.url:待测试mongo实例的连接地址
    • mongodb.database:测试时使用的数据库名称(default: ycsb)注:该参数在实际使用过程为生效,但也不报错,版本原因?
    • table: 测试表的名称 (default: usertable)

    5、压测过程

    5.1 加载数据

    ./bin/ycsb load mongodb -s -P ./workloads/workloada -threads 100 -p insertstart=0 -p recordcount=1000000 -p readproportion=0 -p updateproportion=0 -p insertproportion=1 -p fieldcount=5 -p fieldlength=2048 -p requestdistribution=uniform -p mongodb.url=mongodb://mongouser:autotest@192.168.0.230:27017/admin -p mongodb.database=ycsb_test -p table=t1 > ./load_result.txt

    上面命令是加载100W条数据,每条数据5个字段,数据长度2048。加载完后数据大小大约10GB,耗时5分钟,可以在 load_result.txt文件查看执行结果,主要用来查看执行失败时的错误。

     正常执行的结果如下:

    5.2 执行测试

    ./bin/ycsb run mongodb -s -P ./workloads/workloada -threads 100 -p recordcount=1000000 -p operationcount=1000000 -p insertstart=0 -p insertcount=0 -p readproportion=0.95 -p updateproportion=0.05 -p insertproportion=0 -p fieldcount=5 -p fieldlength=2048 -p mongodb.url=mongodb://mongouser:autotest123@192.168.0.230:27017/admin -p table=t1 > ./run_result.txt

    上面命令:

    • recordcount=1000000:表示操作加载的100W条数据(该值必须小于等于加载的记录数,否则会影响update操作的准确性)
    • operationcount=1000000:表示读写共执行100W次(可以随意填写,可用来控制压测时间
    • insertcount=0,readproportion=0.95,updateproportion=0.05:表示插入数据占比0,读占比95%,更新占比5%

     执行结果

    结果字段说明:

    • RunTime(ms):数据加载所用时间,单位毫秒(ms)
    • Throughput(ops/sec):吞吐量,即ops(每秒操作次数)
    • Operations:操作的总次数
    • AverageLatency(us):平均响应延时,单位是微秒(us)
    • MinLatency(us):最小响应时间,单位是微秒(us)
    • MaxLatency(us):最大响应时间,单位是微秒(us)
    • 95thPercentileLatency(us):95%的操作延时,单位是微秒(us)
    • 99thPercentileLatency(us):99%的操作延时,单位是微秒(us)
    • Return=OK:成功返回数,这个值不符合测试要求,则证明测试失败.
    • [READ]开头的代表只读的操作记录,其他还有例如上面的[insert],[UPDATE]等,其他可以理解的就是字面意思,不能理解也不需要太过关注.
  • 相关阅读:
    Oracle死锁
    Oracle forall bulk collect批量数据更新
    Oracle组合索引与回表
    查看Oracle执行计划
    Oracle 用户、角色、权限(系统权限、对象权限)的数据字典表
    Oracle计算两个时间戳相差秒数,精确到毫秒
    关于Oracle的疑问
    Oracle update和order by
    Oracle Connect by与递归with
    关于Oracle表连接
  • 原文地址:https://www.cnblogs.com/testlearn/p/15693366.html
Copyright © 2011-2022 走看看