关于监控指标 tidb_tikvclient_batch_executor_token_wait_duration_bucket

【TiDB 使用环境】生产
【TiDB 版本】v6.5.0
【集群节点数】3db 6kv
【问题复现路径】
大量并发批量 insert,在 db 和 kv 的各项 cpu 和 disk 指标都没有超限的情况下,tps 就是上不去,并且这个 tps 在连接数和 batch 大小相同情况下对于宽表还要相对较低,观察到 db 监控中有一个 token 指标获取时间较长,但没有找到对这个 token 配置的详细的说明,请问这个是否是 db 设置的对 kv 请求的流控,还有这个限制是否支持调整?

图:TiDB / Transaction / Commit Token Wait Duration

图:TiDB / Transaction / KV Transaction OPS

图:TiDB / Server

图:TiKV / Thread CPU

你这个大量并发批量是指 业务代码连接的批量还是人工导入数据的批量。tps上不去,你是指并发量很大,insert很多,但是数据库他只接受了你当前的tps的值。无法增加是吗

是业务代码,spark jdbc dataframe writer,我这调整并发数,批量提交数量,拆分或不拆分事务,在并发量超过一定数量的情况下,落库总体时间基本一致,无法随着并发量增长变快

他有一个度的,并发量在怎么提高,他的写入时间也不会加快,甚至高到一定程度,可能还会变慢。TPS具体如何我不太清楚,我这边QPS,10个连接并发查询大表,查询10万行,每个sql都是在40-50秒。我提高到12个并发,他每个SQL执行时间都在50-70秒了。
还是请其他大佬再讲讲介绍一下

1 个赞

其实也不是 tps 吧我没描述准确,具体来说是单个连接时可以达到的插入速率,在使用更多链接时每个连接的速率会下降,但在 kv 和 db 的负载上又看不大出来瓶颈在哪。比如下面这个图是 spark 插入数据的 stage,在每个 task 数据量一致的情况下,可以明显看到先开始的 stage 耗时较短,后面并发量起来之后每个 task 的耗时大幅上涨

是对同一个表的操作吗?不同表不清楚,同一个表操作,我这边是有看到,他是有限制的,无论读取还是写入,并发一高,他就平均降低,总速率变化不大

是同一个表,请问是什么限制啊?

这个不清楚,没去研究过,个人感觉是,这个表所有的数据是平均分布在几百上千个region,每个默认是96MB,8版本之后默认256. 你磁盘IO的读取写入速度再快。他也要去一个个去找这几百上千个region。然后去执行查询。
如果是写入,他并发在高,也要按照顺序,一个个写96MB的文件。。
具体有没有限制得让官方的人来说明一下。
这只是我意淫的。仅供参考

我悟了,这个好像还真是流控,我调下看看效果
store/tikv: enlarge default committer-concurrency to avoid queuing by youjiali1995 · Pull Request #23720 · pingcap/tidb
tidb_committer_concurrency 从 v6.1.0 版本开始引入

小版本号是0的尽量少用。。

你说得对


对应的 cpu 线程有太大么?看起来已经超过默认限制了。

raftstore cpu 和 apply cpu数量我都调了的,这几个都没超限,我后来调了 commiter concurrency,对应的 commit token wait duration 是下来了,但是对我整体的插入速度改进不大,可能是因为本身耗时大头不在kv提交上,我测了下大概执行sql也就是db准备变更这个阶段耗时占了有8成左右,这块的优化不是很显著

如果觉得是 tidb-server 侧的问题:

  1. 看下 proxy 侧有没有瓶颈
  2. 看下应用服务器资源使用率
  3. 有个通用优化方案是 tidb-server 多实例部署并且绑核或者绑 numa。会有提升的。

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