tidb高并发大批量数据写入,如何提高qps

tidb数据库配置:8核cpu,8g内存,ssd固态硬盘。目前测试数据是每批次insert1000数据,qps最多只能达到15,也即是处理能力才2w/s。请教下如何提升qps?




但批次插入1000条数据,最高耗时2.5s

CPU没了,你是一条sql里有1000个value?

insert语句是这样的,1000个value

:upside_down_face:瓶颈是CPU,不嫌麻烦的话可以试试7.5,官方数据里insert性能翻了一倍

有点不太理解,服务器是8核cpu,现在cpu利用率才80%。还有很多cpu资源吧

:joy:这只是dashboard自己采集的值,可以在主机上用dstat 1 命令输出直接的值,cpu不光user还有自身sys的使用,除非是超高并发压力,不然不可能长时间100%,85%已经算是满负载了

可以设置什么参数,放开数据库对系统的cpu使用吗。让数据库占用系统的cpu最大

提高qps最简单的方法就是拆分sql,并行执行insert

你的意思,单批次插入少点?但是最终的吞吐量=单次插入条数*qps。qps上去了,单次插入条数下去了,乘积还是差不多。

只有一个tidb节点吗? 看你这个集群像是个单机。

https://docs.pingcap.com/zh/tidb/stable/high-concurrency-best-practices#高并发批量插入场景

可以先尝试照着最佳实践做做看。

你的集群有拓扑的,几个tikv

看上去是CPU处理能力有限

搞成多线程试试,代码中使用多个线程异步执行插入操作

不要一次性insert包含多个value,并发去插入试试。好像这个点跟mysql不一样吧

对于Insert想到的几个问题 1、 insert很多个value时 会造成parse/compile时间占用过长,解决此问题可以试试 noprepare plancache特性并且降低value组数,这个Plan cache需要调整一个fix 来增加运行的value长度。不过是实验特性
https://docs.pingcap.com/zh/tidb/stable/optimizer-fix-controls
2、 大量insert时 IO会有压力,解决方式就是换快的硬盘和加tikv .如果IO没问题可以调整tikv几个线程增加向下的压力
3、tidb存算分离架构导致有些必然的性能损失。另外连接tidb时最好通过负载均衡连接多个插入

多加几个tidb-service节点