3.x和4.x replace into xxx select xxx 性能问题

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

  • 【TiDB 版本】:3.0.14 4.0.4
  • 【问题描述】:
    – 3.0.14:Query OK, 2996504 rows affected (1 min 40.93 sec)
    – 4.0.4 :Query OK, 2996178 rows affected (4 min 3.04 sec)

3的版本:set @@tidb_batch_insert = ON; set @@tidb_batch_delete = ON;
4的版本:优化了大事务处理。txn-total-size-limit (key-value 记录的总大小不能超过10G)
4的版本,我已经调整:txn-total-size-limit 为10G.从目前性能上看,没有3的快。

想请教下有哪些参数,可优化tidb 4的版本,提升replace into xxx select xxx 大事务性能 ?
业务上,不能改变语法规则缩小事务的前提下。从DB层入手,有哪些意见,还往指点

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。

  1. 检查两个集群的拓扑是否一致,机器性能是否相同
  2. 集群的负载是否相同,可以都在业务低峰期执行看看时间

拓扑一致,机器性能相同。
3.0.14 没有运行业务 4.0.4 没运行业务。

我是问官方,3.x 和4.x 已知有事务上的改进,参数上有哪些可以优化,可以达到和3.x一样效果
我看其他人也反馈了,有4.x的数据写入问题。


4.0 版本是使用的乐观事务吗?默认是悲观事务,会加锁。
可以 set tidb_txn_mode=‘optimistic’ 试试。

tidb_txn_mode

  • 作用域:SESSION | GLOBAL
  • 默认值:“pessimistic”
  • 这个变量用于设置事务模式。TiDB v3.0 支持了悲观事务,自 v3.0.8 开始,默认使用悲观事务模式
  • 但如果从 3.0.7 及之前的版本升级到 >= 3.0.8 的版本,不会改变默认事务模型,即 只有新创建的集群才会默认使用悲观事务模型
  • 将该变量设置为 “optimistic” 或 “” 时,将会使用乐观事务模式

4.0.4 我调整使用:optimistic ,进行复测,问题依旧
4.0.4 (pessimistic ) :Query OK, 3244303 rows affected (3 min 36.83 sec)
4.0.4 (optimistic ):Query OK, 3244300 rows affected (3 min 42.56 sec)

对比下两个集群的over-view,tidb,detail-tikv 的监控,看下是否有不同的地方

我说了是一样的!
3的版本:set @@tidb_batch_insert = ON; set @@tidb_batch_delete = ON;
4的版本:优化了大事务处理。txn-total-size-limit (key-value 记录的总大小不能超过10G)
官方变动了,处理方式。我在咨询,在4.x哪里可以对replace into xxx select xxx 有提升

Hello~ 如果还是太清楚如何排查,可以尝试提供一下 v3.0 和 v4.0 相关监控,我们一起看一下。[FAQ] Grafana Metrics 页面的导出和导入

Hi,目前看起来您在 3.0 版本中用的是 Batch Insert,在 4.0 版本中用的是大事务。这两种机制不大一样,能否试试在 4.0 中也用 Batch Insert ,看看效率如何呢?(注:需要打开 TiDB 的 enable-batch-dml 参数)