批量导入数据时跟mysql比较,性能慢很多是什么原因?如何能提速?

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v4.0.8
  • 【问题描述】:我们系统数据库最近把原来的mysql升级成tidb集群了,经过了一轮性能测试,在查询和批量删除操作上tidb集群比单机mysql有显著的性能提升,在批量导入数据时,tidb数据库集群比单机mysql数据库要慢很多,想咨询下是什么原因引起的,有什么办法可以提速?另外在测试批量更新数据时,如果更新的数据项是文本时,tidb和mysql性能上区别不大,mysql略占优势,如果是更新数字类型的数据项,比如tinyint,int等,tidb比mysql要慢很多,这又是什么原因导致的呢,以下是测试结果。

批量导入
image

批量更新
image

在 TiDB 上做批量插入或更新时,尽量利用 TiDB 分布式可扩展的优势,通过调整合适的 batch 大小,比如 100 条一个事务,和增加并发的方式提高吞吐量,减少批处理任务耗时。

需要检查并避免 TiDB 可能遇到的热点问题,参考 https://docs.pingcap.com/zh/tidb/stable/high-concurrency-best-practices#热点产生的实例

如果使用 jdbc 进行批量插入更新,还可以配置相关的 batch 参数,参考
https://docs.pingcap.com/zh/tidb/stable/java-app-best-practices#使用-batch-批量插入更新