Yahoo! Cloud Serving Benchmark (YCSB) 是一个Java语言实现的主要用于云端或者服务器端的数据库性能测试工具。

下载YCSB

下载最新版本的YCSB

1
2
3
curl -O --location 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

查看帮助文档

1
./bin/ycsb --help

或者进入命令行查看帮助

1
2
./bin/ycsb shell basic
> help

workload模板文件

解压后在workloads目录下,有默认的几种测试场景模板文件,

模板说明文档Core Workloads

  • workloada: 读写均衡型,50%/50%,Reads/Writes
  • worklandb: 读多写少型,95%/5%,Reads/Writes
  • worklandc: 只读型,100%,Reads
  • worklandd: 读最近写入记录型,95%/5%,Reads/insert
  • worklande: 扫描小区间型,95%/5%,scan/insert

workland模板配置参数

编辑workland配置参数,可以设置模拟不同的测试场景, 参数说明文档Core YCSB properties

  • recordcount YCSB load阶段加载的记录条数
  • operationcount YCSB run阶段执行的操作总数
  • readallfields 查询时是否读取记录的所有字段
  • readproportion 读操作的百分比
  • updateproportion 更新操作的百分比
  • scanproportion 插入操作的百分比

命令参数

Running a Workload

命令参数格式:

1
ycsb [command] [database] [options]

command选项:

  • load:载入测试数据。
  • run:执行测试过程。
  • shell:交互模式。

database选项:指定测试的数据库场景

options选项:

  • -P file :指定workload文件,相对路径或者绝对路径。
  • -cp path :指定额外的Java classpath。
  • -jvm-args args :指定额外的JVM参数。
  • -p key=value :设置ycsb配置项,会覆盖workload文件的配置项。
  • -s :运行时的中间状态打印到stderr中。
  • -target n :表示1s中总共的操作次数。
  • -threads n :设置ycsb client的并发测试线程数,默认是1,单线程。

测试结果

测试结果输出示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[OVERALL],RunTime(ms), 10110
[OVERALL],Throughput(ops/sec), 98.91196834817013
[UPDATE], Operations, 491
[UPDATE], AverageLatency(ms), 0.054989816700611
[UPDATE], MinLatency(ms), 0
[UPDATE], MaxLatency(ms), 1
[UPDATE], 95thPercentileLatency(ms), 1
[UPDATE], 99thPercentileLatency(ms), 1
[UPDATE], Return=0, 491
[UPDATE], 0, 464
[UPDATE], 1, 27
[UPDATE], 2, 0
[UPDATE], 3, 0
[UPDATE], 4, 0
...

输出测试指标:

  • 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: 成功返回数,这个值不符合测试要求,则证明测试失败.
  • [UPDATE]开头的代表UPDATE的操作记录

使用JDBC

Using the Database Libraries

创建数据库表

创建如下数据库和表,数据库默认为ycsb,字段数量默认是10个。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CREATE DATABASE ycsb;

CREATE TABLE usertable (
	YCSB_KEY VARCHAR(255) PRIMARY KEY,
	FIELD0 TEXT, FIELD1 TEXT,
	FIELD2 TEXT, FIELD3 TEXT,
	FIELD4 TEXT, FIELD5 TEXT,
	FIELD6 TEXT, FIELD7 TEXT,
	FIELD8 TEXT, FIELD9 TEXT
);

修改db.properties配置

db.properties文件路径在YCSB_HOME/jdbc-binding/config/目录下,也可以创建自己的,在执行时指定路径加载。 配置内容如下:

1
2
3
4
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1:3306/ycsb
db.user=admin
db.passwd=admin

指定JdbcDBCreateTable类,加载所需的jar运行

1
java -cp YCSB_HOME/jdbc-binding/lib/jdbc-binding-0.4.0.jar:mysql-connector-java-5.1.37-bin.jar site.ycsb.db.JdbcDBCreateTable -P db.properties -n usertable

运行测试

运行所要加载的包在jdbc-binding/lib目录下

指定workload模板运行

1
2
bin/ycsb load jdbc -s -P workloads/workloada -P db.properties -cp YCSB_HOME/jdbc-binding/lib/jdbc-binding-0.4.0.jar:mysql-connector-java-5.1.37-bin.jar > mysql-load-workloada.log

参考