为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】linux环境
【概述】 对大表进行多表联查后插入到一张新表中:insert into …select … 。
尝试设置:
set @@session.tidb_batch_insert =1
set @@tidb_batch_insert=ON 均无效。
【背景】 大表一张大概30G.
【现象】 ERROR 8004 (HY000) at line 1: Transaction is too large, size: 1073741830
【业务影响】 不能插入大数据
【TiDB 版本】 tidb5.2.1
Kongdom
(Kongdom)
2
1 个赞
db_user
(Db User)
3
分批插入吧,预期内现象,tidb有事务大小控制,可以由参数控制,最大10G
1 个赞
Kongdom
(Kongdom)
9
插入30G肯定是不行了,还是按楼上说的搞分批吧。
另外tidb_batch_insert这个参数4.0以后好像就没用了,改成txn-total-size-limit配置文件参数控制了
txn-total-size-limit
- TiDB 单个事务大小限制
- 默认值:104857600
- 单位:Byte
- 单个事务中,所有 key-value 记录的总大小不能超过该限制。该配置项的最大值不超过
10737418240
(表示 10GB)。注意,如果使用了以 Kafka
为下游消费者的 binlog
,如: arbiter
集群,该配置项的值不能超过 1073741824
(表示 1GB),因为这是 Kafka
的处理单条消息的最大限制,超过该限制 Kafka
将会报错。
Kongdom
(Kongdom)
10
总结一下解决方案:
1、调整事务大小参数,参数在tidb配置文件中,参数名为txn-total-size-limit,默认为1G,最大可调整为10G。
调整方式参考这里:https://docs.pingcap.com/zh/tidb/v4.0/maintain-tidb-using-tiup/#修改配置参数
2、优化语句,可以将脱敏语句或者执行计划发出来,看看有无优化空间。
3、视业务情况分批插入,比如按时间段,按主键区间等
4、如果是数据迁移,可以直接rename表名,或者通过工具进行迁移。
5 个赞
疾风之狼
(疾风之狼)
11
批量插入,还是拆分成多个小事务吧,不要贴着限额来。
system
(system)
关闭
12
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。