tikv 单线程raw get qps 只有2千多。

大伙好,最近我在测试单节点tikv 的非常简单的raw kv ,想这个是否能用于替换类似redis的nosql,但测试结果是多线程能达到2万多。但单线程就上不去,大概在2千左右。
想问下,单线程的瓶颈在哪里,是否能通过改配置来提高。
我用的是go的客户端测试。我在10.54.37.72上部署的是一个pd和一个tikv,foo的value是非常短的字符串。像是瓶颈不在rocksdb上。
我尝试过修改raw_get的函数,不读取rocksdb直接返回。但qps还是上不去。不是知道是不是路由采用了future库的异步get的问题。想把异步改成直接返回试试,还没找到方法。
tikv的低版本和高版本都测试过。

go的raw测试代码。

package main

import (
“fmt”
“time”
github.com/pingcap/tidb/config
github.com/pingcap/tidb/store/tikv
)

func main() {
cli, err := tikv.NewRawKVClient(string{“10.54.37.72:2379”}, config.Security{})
if err != nil {
panic(err)
}
defer cli.Close()

fmt.Printf("cluster ID: %d\n", cli.ClusterID())


tamp := time.Now().Format("2006-01-02 15:04:05")
fmt.Println(tamp)
var a int64
key := []byte("foo")
for a = 0; a < 100000; a++{
    _, err := cli.Get(key)
    if err != nil {
        panic(err)
    }
    //fmt.Printf("found val: %s for key: %s\n", val, key)
}
end := time.Now().Format("2006-01-02 15:04:05")
fmt.Println(end)

}

QPS 2K+基本符合预期。单并发测试,qps 与请求的瓶颈 duration 成反比,吞吐肯定有限。对于 tikv 这种系统,单线程的测试意义很小,不建议在这上面浪费太多时间

3 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。