并发高后insert插入延迟增加,应该如何调优

TiDB共六台
并发低(500并发)时avg延迟到20ms

并发高(3000并发)后avg延迟到100ms

如下是insert语句

insert into `table` values ( ... ) on duplicate key update `a` = values ( `a` ) , `b` = values ( `b` ) , `c` = values ( `c` ) 

我应该查看哪些指标来排查此问题

看下 Dashboard 的热力图,看下有没有热点问题,你这个场景能批量写入吗,批量写入的话吞吐量也会有提升

谢谢。这个只有一条记录,没法批量

那就主要看有没有热点吧,去 Dashboard 看热力图吧

要求这么高吗?看我的。活了几年了还屹立不倒,没任何业务反馈有问题 :joy:

你好,dashboard有点问题,grafana是可以的。可以指导下看grafana哪个指标嘛

检查Grafana监控面板中的"KV Cmd Duration"指标
观察TiKV的CPU利用率,特别是gRPC线程、raftstore线程和apply线程的CPU使用情况
检查PD的TSO (Timestamp Oracle) 延迟
排查PD leader选举是否存在异常
检查Region数量是否过多,考虑开启Hibernate Region功能

1 个赞

看看各线程池cpu 使用率

Tikv CPU

KV Cmd Duration

PD TSO

感觉Region是有点多了

主要是想知道延迟为啥一下子增加这么多

你指定是 Region 多了,你看看你这 raftstore 线程池随着 gc (默认间隔 10 分钟)起伏的频率,你截图这段应该是没负载吧,都能到 400%,你是改参数了吧,正常这个线程池可能都没这么大

1 个赞

是的参数是改过,调大了raft store的线程数

我准备用默认参数再试一下,我想TiDB这么成熟 默认参数应该都是有道理的

负载情况下


使用默认配置,高并发下avg降到60ms

看来配置和硬件还是要平衡,才能高效

去 Dashboard 看热力图吧

我做压测,tidb大概500并发就都性能极限了,最好控制并发别搞出来3000

看你用的是这个写法,有没有可能有锁的存在?就是会不会有写冲突?