Upsert数据优化

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
版本:v5.1.1
集群:3PD(8vCore32G),3TIDB(16vcore64G),11TIKV(16vcore128G),8TIFLASH(16vcore128G)

【概述】
您好,我们有一张30亿数据带update_timestamp索引和一个tiflash副本的表需要每天upsert写入1亿数据,同时根据update_timestamp读取更新记录,目前的做法是基于spark+jdbc写数据到集群。主要的问题点在于 我们只想更新非空字段到DB中(INSERT INTO table (columns) values (columnValues) ON DUPLICATE KEY UPDATE column = IFNULL(values(column),column),… ),这样写入性能远远达不到要求(30core,1亿数据,BatchSize为200,20个字段,需要5h写完,且集群的CPU、IO都没有达到高峰)。想要问一下在 保留非空字段不更新 的条件下是否有优化手段?

麻烦提供TiDB-Server、TiKV-Server在导入前1小时与导入中1小时的监控数据

写入时间为6:30 - 10:30(指标可能受别的业务的轻微干扰)
TIDB


TIKV

https://metricstool.pingcap.com/#backup-with-dev-tools
麻烦按照上面的方法导出监控数据。

写入时间在6:30-10:30左右
TIDB:
TiDB-Server_2021-11-18T07_40_25.111Z.json (6.7 MB)

TIKV:
TiKV-Summary_2021-11-18T07_42_26.193Z.json (14.4 MB)

麻烦TiKV-Details的也提供一下。

TiKV-Details_2021-11-19T02_35_59.572Z.json (348.6 KB)

你导出的这个监控是没有数据的,麻烦再导出一份。