无论是我自己部署的单机版,或者是从论坛里看到的参考数据,scan 的QPS大概是2-3K的样子,(ycsb) 这个是tikv自身的实现限制吗?是不是因为要做join 等操作?能否展开讲讲 put, get 的QPS都比这个高一个量级
请问是用 go-ycsb 直接压 tikv 吗?还是压 tidb 呢?scan 是对数据库中的多条记录进行范围扫描,get 是对数据库的点查。
压的是 tikv,配置如下:
recordcount=20000000
operationcount=20000000
workload=core
fieldlength=1024
fieldcount=1
readallfields=true
readproportion=0
updateproportion=0
scanproportion=1
insertproportion=0
maxscanlength=1000
requestdistribution=uniform
scanlengthdistribution=uniform
threadcount=32
TiKV 底层使用的是 rocksdb 来存取本地的数据,scan 以及 get put 使用的是不同的 rocksdb 的接口(具体可以参考下 rocksdb 的具体实现)。另外如果 Scan keys 的数量特别大,会占用大量的系统资源,导致请求的延迟变大。
单纯针对rocksdb做scan 测试,结果反过来,速度比get还高一个量级,
能提供下这个结果的测试方法和 rocksdb 参数吗?
bin/go-ycsb run rocksdb -P workloads/fa5 -p rocksdb.dir=/mnt/nvme/tikv/fa5 -p measurementtype=raw -p threadcount=32
其它配置同上,QPS 大约能到340k/s
上面命令的 workload 以及 QPS 340k/s 是 get 还是 scan 操作,正常来说 scan 比 get 高一个量级不太符合预期。
可以参考下文中的测试方法分别对 point lookup 和 range scan 测试。
go-ycsb有点问题,换ycsb测了,scan = 108K qps,没记错和scan差不太多
2020-02-13 14:21:02:760 351 sec: 200000 operations; 108518.72 current ops/sec; [CLEANUP: Count=32, Max=47263, Min=1, Avg=1479.81, 90=7, 99=47263, 99.9=47263, 99.99=47263] [SCAN: Count=200000, Max=7923, Mi
n=1, Avg=27.41, 90=15, 99=463, 99.9=757, 99.99=7639]
[OVERALL], RunTime(ms), 351843
[OVERALL], Throughput(ops/sec), 568.4353532683612
[TOTAL_GCS_PS_Scavenge], Count, 0
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 0
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.0
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 0
[TOTAL_GC_TIME], Time(ms), 0
[TOTAL_GC_TIME_%], Time(%), 0.0
[CLEANUP], Operations, 32
[CLEANUP], AverageLatency(us), 1479.8125
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 47263
[CLEANUP], 95thPercentileLatency(us), 8
[CLEANUP], 99thPercentileLatency(us), 47263
[SCAN], Operations, 200000
[SCAN], AverageLatency(us), 27.40946
[SCAN], MinLatency(us), 1
[SCAN], MaxLatency(us), 7923
[SCAN], 95thPercentileLatency(us), 191
[SCAN], 99thPercentileLatency(us), 463
[SCAN], Return=OK, 200000
配置
recordcount=80000000
operationcount=200000
workload=site.ycsb.workloads.CoreWorkload
fieldlength=1024
fieldcount=1
readallfields=true
readproportion=0
updateproportion=0
scanproportion=1
insertproportion=0
maxscanlength=100
minscanlength=100
requestdistribution=uniform
scanlengthdistribution=uniform
收到,我们跟进看下。