tikv scan 操作有点慢

无论是我自己部署的单机版,或者是从论坛里看到的参考数据,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

收到,我们跟进看下。