本文介绍Redis企业版(容量存储型)性能测试的具体方法。
工作负载
- Load:100%的string set操作(写操作)。
- Uniform-Read:采用Workload A,100%均匀随机string get操作(读操作),主要测试严苛条件下的读性能。
- Zipfian-Read:采用Workload C,数据分布方法为zipfian,测试大部分读请求访问小部分数据的性能,符合大部分的读场景。
- Uniform-50%Read-50%Update:采用Workload A,50%的string set操作(更新操作)与50%的string get操作,主要测试随机更新的性能。
关于Workload的详细介绍,请参见Core Workloads。
测试场景
测试主要针对下述两种场景进行:
- 内存大于数据场景:绝大部分数据可以在内存中访问到,此场景下内存与数据的比例约为7:1。
- 数据大于内存场景:只有部分数据缓存在内存,绝大多数访问需要读写硬盘,此场景下内存与数据的比例约为1:4。
测试命令
下述脚本以数据大于内存场景为例。
#! /bin/bash
ip=192.168.0.23
port=3100
timeout=30000
command_group=string
recordcount=640000000
run_operationcount=20000000
fieldcount=1
fieldlength=100
threads=32
load_sleep_time=600
run_sleep_time=60
echo "##################################### $command_group ############################################"
#Load
./bin/ycsb load redis -s -P workloads/workloada -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${recordcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads}
sleep ${load_sleep_time}
#Uniform-Read
./bin/ycsb run redis -s -P workloads/workloadc -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=uniform" -threads ${threads}
sleep ${run_sleep_time}
#Zipfian-Read
./bin/ycsb run redis -s -P workloads/workloadc -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=zipfian" -threads ${threads}
sleep ${run_sleep_time}
#Uniform-50%Read-50%Update
./bin/ycsb run redis -s -P workloads/workloada -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=uniform" -threads ${threads}
参数 | 说明 |
---|---|
ip | Redis实例的IP地址。 |
port | Redis实例的服务端口。 |
timeout | 测试命令的超时时间。 |
command_group | 测试类型,配置为String。 |
recordcount | 数据装载阶段准备的数据量。 |
run_operationcount | Run阶段操作的数据量。本测试中:
|
fieldcount | 字段个数,配置为1。 |
fieldlength | 值长度,配置为100。 |
threads | YCSB线程数,根据实例规格配置。 |