【 TiKV 使用环境】测试
【 TiKV 版本】
tikv-server : v6.5.8
go-client :v2.0.7
【遇到的问题:问题现象及影响】
1.使用乐观事务反复put同一个key,value size为64kb,每次put的value会变化
2.循环put 1万次,平均时延2.3毫秒
3.循环put 1万次,中间sleep 1秒,平均时延4.5毫秒
业务请求不频繁,但对每次请求的时延很敏感,导致业务性能有抖动
源码,去掉Lock Key,可以优化500微秒:
func lockPuts(keys [][]byte, values [][]byte) error {
tx, err := client.Begin()
if err != nil {
return err
}
tx.SetPessimistic(true)
err = tx.LockKeysWithWaitTime(context.Background(), kv.LockNoWait, keys...)
if err != nil {
return err
}
for i := 0; i < len(keys); i++ {
key, val := keys[i], values[i]
err := tx.Set(key, val)
if err != nil {
tx.Rollback()
return err
}
}
tx.Commit(context.Background())
return nil
}
var total int64 = 0
for i := 0; i < 10000; i++ {
start := time.Now()
err := lockPut(xxx,xxx)
if err != nil {
panic(err)
}
end := time.Since(start)
fmt.Println("cost:", end, "\n")
total += end.Microseconds()
time.Sleep(1*time.Second)
}
fmt.Println("avg:", total/int64(*count))
【资源配置】
nvme盘,tiup部署默认配置的3个tikv节点