一 YCSB 简介

YCSB(Yahoo! Cloud Serving Benchmark)是 Yahoo 研究院开源的键值/NoSQL 数据库性能基准测试框架,支持 Redis、MongoDB、HBase、Cassandra 等。

YCSB的工具原理主要包括工具模型、负载生成器和操作执行。

二 YCSB 测试

测试主要分为两个阶段:

load阶段:向数据库批量插入测试数据(纯insert);

run阶段:按照指定workload混合执行读、写、更新和查询操作,然后统计运行时间、吞吐量和延迟等。

三 六种核心workload

Workload

文件

操作分布

典型场景

A

workloada

50% Read / 50% Update

会话存储,读写均衡

B

workloadb

95% Read / 5% Update

照片标签,读多写少

C

workloadc

100% Read

只读缓存,测纯读性能

D

workloadd

95% Read / 5% Insert(Latest分布)

时间线,读最新记录

E

workloade

95% Scan / 5% Insert

短范围扫描(如按 Thread ID)

F

workloadf

50% Read / 50% Read-Modify-Write

用户记录读取并修改回写

加上开始的load操作(纯insert插入操作),一共算是7种workload。

四 workload举例

1 workloada:--5读5写        

recordcount=1000
operationcount=1000
workload=site.ycsb.workloads.CoreWorkload

readproportion=0.5
updateproportion=0.5
scanproportion=0
insertproportion=0

requestdistribution=zipfian

 2 workloadc:  --100%读

recordcount=1000
operationcount=1000
workload=site.ycsb.workloads.CoreWorkload

readproportion=1
updateproportion=0
scanproportion=0
insertproportion=0

requestdistribution=zipfian

 3 workloade:  --95%scan5%insert

recordcount=1000
operationcount=1000
workload=site.ycsb.workloads.CoreWorkload

readproportion=0
updateproportion=0
scanproportion=0.95
insertproportion=0.05

requestdistribution=uniform

maxscanlength=100
scanlengthdistribution=uniform

五 YCSB 基本执行命令

本文是测试mongodb为例:

1. 加载数据(Load 阶段)

bin/ycsb.sh load mongodb \
  -P workloads/workloada \
  -p recordcount=100000 \
  -p mongodb.url=mongodb://localhost:27017/ycsb \
  -threads 8 \
  -s

2. 运行压测(Run 阶段)
bin/ycsb.sh run mongodb \
  -P workloads/workloada \
  -p operationcount=1000000 \
  -p mongodb.url=mongodb://localhost:27017/ycsb \
  -threads 32 \
  -target 10000 \
  -s

六 YCSB测试结果

 1 完整输出结果

[OVERALL], RunTime(ms), 12560
[OVERALL], Throughput(ops/sec), 7961.783439490446
[TOTAL_GCS_G1_Young], 12
[TOTAL_GC_TIME_G1_Young(ms)], 45
[TOTAL_GCS_G1_Old], 0
[TOTAL_GC_TIME_G1_Old(ms)], 0
[READ], Operations, 62800
[READ], AverageLatency(us), 112.35
[READ], MinLatency(us), 18
[READ], MaxLatency(us), 3654
[READ], 95thPercentileLatency(us), 215
[READ], 99thPercentileLatency(us), 489
[READ], Return=OK, 62800
[UPDATE], Operations, 62800
[UPDATE], AverageLatency(us), 136.72
[UPDATE], MinLatency(us), 22
[UPDATE], MaxLatency(us), 4120
[UPDATE], 95thPercentileLatency(us), 268
[UPDATE], 99thPercentileLatency(us), 572
[UPDATE], Return=OK, 62800

2 2个核心指标

RunTime(ms)    

总压测耗时,单位毫秒;    整个 run/load 跑完一共花了多少时间;
Throughput(ops/sec)    

整体吞吐量,每秒操作数;    性能第一指标,越高越好;

3 操作类型分段

[READ]/[UPDATE]/[SCAN]/[INSERT]
每个操作类型结构完全相同,以 READ 举例:
Operations
该操作总执行次数;
AverageLatency(us)
平均延迟,微秒;越小性能越好,代表单次数据库操作平均耗时
MinLatency(us)
最小单次延迟,最优情况
MaxLatency(us)
最大延迟,毛刺、慢查询峰值,这个值大代表存在长尾慢请求
95thPercentileLatency(us)
P95 延迟:95% 的请求延迟低于该数值,业务核心参考指标
99thPercentileLatency(us)
P99 延迟:99% 请求低于该值,衡量长尾延迟,数据库优化重点关注
Return=OK, xxx
成功操作总数;OK 数量≠Operations 代表有报错(超时、连接失败、数据库异常)

4 实际业务评判标准

吞吐量 Throughput
同等线程、同等数据量下数值越高,数据库并发能力越强;Mongo 集群分片可显著提升。
P95 / P99 延迟(最重要,比平均值靠谱)
平均值容易被大量快请求抹平,长尾慢请求只会体现在分位值;线上业务卡顿大多由 P99 延迟过高导致。
成功数 Return=OK
成功次数必须等于 Operations,不等说明压测报错:
Mongo 连接池耗尽
数据库超时、锁冲突
客户端参数配置过小
GC 耗时
GC 总时间占 RunTime 比例超过 5%,建议调大 JVM 堆 -Xms8g -Xmx8g

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐