java中使用连接池多线程进行插入

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】 tidb5.0.0

【使用场景】
对一张约5亿行数据的表进行较多个维度的分组汇总,并将汇总后的数据插入到另一张表中

【问题描述】
使用java 线程池(每个任务最大20个线程)配合hikari连接池使用 insert into select 方式进行大批量数据插入时,insert into select 语句根据任务数量性能有较大下降。

如果是只开启一个任务,则每条insert into select 的时间约为10s
如果是并行开启两个任务,则每条insert into select 的时间约为 20s
如果是并行开启五个任务,则每条insert into select 的时间约为40s+

【慢sql截图】
1、只开启一个任务

2、并行开启两个任务

3、并行开启五个任务

有insert期间CPU、磁盘的性能图吗?

1、将自动统计信息更新时间窗口错开
set global tidb_auto_analyze_end_time=‘02:00 +0000’
避免统计更新占用资源
2、看看表的分片数
show table tablename regions
(低的话,可以手动打散:
split table tablename BETWEEN (0) AND (9223372036854775807) REGIONS 128;)

另外表的主键是什么类型?整型吗?

表的主键是bigint类型,使用的auto_random

那就尽可能把表打散,关自动统计更新,disable表上一切约束

你的tikv和tidb是怎么分布的?
6主机,6 tikv,6 tidb-server,这样?

请问这样的分布,需要打散么

够多了,不需要,现在并发插入还是很慢?内存和磁盘使用率如何,有I/O阻塞吗?