tidb4.0插入大量数据提示Transaction is too large

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

  • 【TiDB 版本】:5.7.25-TiDB-v4.0.0-rc
  • 【问题描述】:

已设置set tidb_batch_insert=1; 执行插入还是提示Transaction is too large。

看其他贴,有回复说:tidb_batch_insert=1 不建议使用,4.0 已经默认关闭。

现在想问一下,如何开启。

1 个赞

无法开启,建议减少事务,或者尝试使用功能 大事务。

https://book.tidb.io/session1/chapter6/big-txn-in-4.0.html#63-40-的大事务支持

我真的是太难了。。。:upside_down_face:

感谢回复

:handshake:

大事务这个功能该如何使用呢?其实大事务是对事务机制的优化,唯一需要修改的是 TiDB 的配置文件,找到这一处配置:

[performance]
txn-total-size-limit = 104857600

如果是集群部署,上面的配置需要单独去每个tidb节点设置么?

如果是通过 tiup 关闭的,可以通过 tiup cluster edit-config 统一修改参数,tiup cluster reload 使参数生效

https://pingcap.com/docs-cn/stable/maintain-tidb-using-tiup/#修改配置参数

如果是 tidb-ansible 方式管理的,可以修改 ${deploy_dir}/conf/tidb.yaml 文件修改参数,然后通过 deploy 将修改后的参数文件分发到目标机器,重启生效

如果要调整 tidb-server 中事务大小限制参数 txn-total-size-limit1G ,该参数位于 performance 模块下,调整后的配置如下:

server_configs:
  tidb:
    performance.txn-total-size-limit: 1073741824

然后执行 tiup cluster reload ${cluster-name} -N tidb 命令滚动重启。

我按上面描述的进行操作之后,操作界面提示Reloaded cluster test-cluster successfully。

但之前的语句还是提示Transaction is too large, size: 104857674

从哪里可以查看配置是否生效?

  1. 查看下目标机器上 tidb.toml 文件中参数是否生效
  2. 查看下 tidb.log 查找一下最近一次重启后的日志中 txn-total-size-limit 参数设置是多少

奇怪,节点上tidb.toml中设置的是104857600

如果要调整 tidb-server 中事务大小限制参数 txn-total-size-limit1G ,该参数位于 performance 模块下,调整后的配置如下:

server_configs:
  tidb:
    performance.txn-total-size-limit: 1073741824

这个配置我是这样加的,执行tiup cluster edit-config test-cluster,然后再里面添加

server_configs:
  tidb:
    performance.txn-total-size-limit: 1073741824

是添加,不是修改。

我这边测试了一下是可以修改成功的,

  • tiup cluster edit-config sg-latest 修改参数

  • tiup cluster reload sg-latest -R tidb 生效配置

  • 查看目标机器上 tidb.toml 配置文件生效

  • 查看 tidb.log 确认配置生效

我这边按照操作时生效了的。只是,tiup中配置的是1073741824,reload之后,去各节点中查看toml是104857600。查看tidb.log中也是104857600。

文档中描述

然后把数字调大就可以了,然后就可以愉快地继续使用了,比如说往后面多加两个零,
只要在 10737418240(10G) 以内就行。来直观感受下在 v3.x 版本和 v4.0 版本执行一个
插入几十万条数据语句的情况。

我这里按照1G设置的

我现在只能手工到各个节点去修改tidb.toml,然后stop_tidb.sh,start_tidb.sh来生效。

可以先临时这样修改一下参数,我这边再尝试复现一下这个问题,如果有更新及时跟你同步。

麻烦确认一下你的 tiup 以及 tiup cluster 版本

tiup --version
tiup --binary cluster

[tidb@ ~]$ tiup --version

tiup version v0.0.5 tiup

Go Version: go1.13

Git Branch: master

GitHash: 9a454f3

Build Time: 2020-04-16 10:33:50 +0800

[tidb@ ~]$ tiup --binary cluster

/home/tidb/.tiup/components/cluster/v0.4.9/cluster

感谢感谢

客气了

我也遇到了这个问题,insert from 出现的,我一个表的数据有100g,服务器内存只有8g。怎么办?