项目批量写入数据的时候服务器CPU负载高

【 TiDB 使用环境】生产环境
【 TiDB 版本】v7.1.0
【遇到的问题:问题现象及影响】
是一个java项目,每天去ftp上拉取csv文件,csv文件条目100w条+,java项目将其转换成sql语句,批量插入到tidb中,但是插入的时候tidb的CPU就暴涨,高的时候40核心的cpu负载直接到80-100左右。
进行过的优化如下:
1.调整jdbc的参数
useSSL=false&useServerPrepStmts=true&cachePrepStmts=true&prepStmtCacheSize=256&prepStmtCacheSqlLimit=2048&rewriteBatchedStatements=true&allowMultiQueries=true&useConfigs=maxPerformance
问题还是存在
2.调整了批量插入数据的条数,一条insert语句带的数据从2000条降到1000条,从1000条降到500,500到400,问题还是存在
3.建表开启了/*T! SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=2 */

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面

各位需要什么信息可以提出来,我贴出监控信息给各位查看。

没啥好办法,如果能减少表上的索引可以大幅增加插入速度。另外不要一条条插入,一个insert带一万条数据问题不大

我现在是一条insert 带1000条数据,另外就是表里面索引是有的:
KEY idx_CUSTOMER_NUMBER (CUSTOMER_NUMBER),
KEY idx_IDENTITY_NUMBER (IDENTITY_NUMBER),
KEY idx_PHONE (PHONE),
KEY idx_LOAN_CARD_NO (LOAN_CARD_NO),
KEY idx_MERCHANT_NAME (CUSTOMER_NAME),
KEY idx_LOAN_START_DATE (LOAN_START_DATE),
KEY idx_IS_REPAYMENT (IS_REPAYMENT),
KEY idx_LOAN_END_DATE (LOAN_END_DATE),
KEY idx_PRODUCT TYPE (PRODUCT_TYPE),
KEY idx_IS_UPLOADED (IS_UPLOADED)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T! SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=2 */ |

你这索引也太多了,会严重影响插入性能

好多索引啊,批量插入的时候,还在不断地维护索引呢
删掉,导入完成后,在创建吧

好的,谢谢各位大佬,我今天把索引全干掉了,明天观察一下!

你的索引也优化下,是不是必须 要这么多的索引,结合业务看看吧

或者要不直接用tidb的工具导入呀,感觉可能比自己处理要更好优化 https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-distributed-import#tidb-lightning-并行导入~

1 个赞

优化索引

谢谢各位大佬,今天观察了一下,没有索引情况下,系统负载很低。



我看他们开发建的索引explain也没走在上面。

不建索引了。

索引都干掉,发现真的有慢查询需要索引再加

对滴,经常使用的就搞索引,偶尔跑的,就不创建了

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