Qiuchi
(Ti D Ber T Hwl2t Uf)
1
【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
舞动梦灵
(Ti D Ber Nckmz Hmh)
2
你这个大量并发批量是指 业务代码连接的批量还是人工导入数据的批量。tps上不去,你是指并发量很大,insert很多,但是数据库他只接受了你当前的tps的值。无法增加是吗
Qiuchi
(Ti D Ber T Hwl2t Uf)
3
是业务代码,spark jdbc dataframe writer,我这调整并发数,批量提交数量,拆分或不拆分事务,在并发量超过一定数量的情况下,落库总体时间基本一致,无法随着并发量增长变快
舞动梦灵
(Ti D Ber Nckmz Hmh)
4
他有一个度的,并发量在怎么提高,他的写入时间也不会加快,甚至高到一定程度,可能还会变慢。TPS具体如何我不太清楚,我这边QPS,10个连接并发查询大表,查询10万行,每个sql都是在40-50秒。我提高到12个并发,他每个SQL执行时间都在50-70秒了。
还是请其他大佬再讲讲介绍一下
1 个赞
Qiuchi
(Ti D Ber T Hwl2t Uf)
5
其实也不是 tps 吧我没描述准确,具体来说是单个连接时可以达到的插入速率,在使用更多链接时每个连接的速率会下降,但在 kv 和 db 的负载上又看不大出来瓶颈在哪。比如下面这个图是 spark 插入数据的 stage,在每个 task 数据量一致的情况下,可以明显看到先开始的 stage 耗时较短,后面并发量起来之后每个 task 的耗时大幅上涨
舞动梦灵
(Ti D Ber Nckmz Hmh)
6
是对同一个表的操作吗?不同表不清楚,同一个表操作,我这边是有看到,他是有限制的,无论读取还是写入,并发一高,他就平均降低,总速率变化不大
舞动梦灵
(Ti D Ber Nckmz Hmh)
8
这个不清楚,没去研究过,个人感觉是,这个表所有的数据是平均分布在几百上千个region,每个默认是96MB,8版本之后默认256. 你磁盘IO的读取写入速度再快。他也要去一个个去找这几百上千个region。然后去执行查询。
如果是写入,他并发在高,也要按照顺序,一个个写96MB的文件。。
具体有没有限制得让官方的人来说明一下。
这只是我意淫的。仅供参考
Qiuchi
(Ti D Ber T Hwl2t Uf)
9
WalterWj
(王军 - PingCAP)
12
对应的 cpu 线程有太大么?看起来已经超过默认限制了。
Qiuchi
(Ti D Ber T Hwl2t Uf)
14
raftstore cpu 和 apply cpu数量我都调了的,这几个都没超限,我后来调了 commiter concurrency,对应的 commit token wait duration 是下来了,但是对我整体的插入速度改进不大,可能是因为本身耗时大头不在kv提交上,我测了下大概执行sql也就是db准备变更这个阶段耗时占了有8成左右,这块的优化不是很显著
system
(system)
关闭
17
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。