大数据量插入问题 insert into A select * from B

tidb 5.0 ,主要组件分别3个节点 机器配置一般

通过navicat连接 执行 insert into A select * from B
B表有几百万条数据
提示 8004 transaction is too large size: 104858005

单个事物数据超限制,通过修改参数:
set @@session.tidb_batch_insert=1;
set @@session.tidb_dml_batch_size=2000

似乎没有效果 于是修改了 txn-total-size-limit 为 10G
重新执行上述语句 跑了10分钟没跑出来 连接断了

问题:这种大数据量insert 应该怎么跑合理 怎么设置参数?
这种场景是不是应该用tispark 写入?

2 个赞

机器配置什么样? 慢可能1是磁盘读取 2是commit时磁盘写慢。能拆成小批量的分批次插入,可能个批次也会全表扫描反而更差,另外如果B表数据有变化多个批次插入的数据不是一致性的

1 个赞

是什么业务需要insert这么大的数据,如果是数据迁移或者同步,建议使用官方组件~

1 个赞


1)要开启autocommit=1,才能开启tidb_batch_insert
2)开启tidb_batch_insert,才能开启tidb_dml_batch_size

https://docs.pingcap.com/zh/tidb/v2.1/transaction-overview/

2 个赞

8或16核,32G或64G 内存,ssd 盘,批量可能超时,或者报错误,但是数据插入成功
[Err] 1055 - Expression #1 of ORDER BY is not in GROUP BY clause and contains nonaggregated column ‘’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

1 个赞

中间数据临时存放使用

1 个赞

几百万数据插入 会报错[Err] 1055 - Expression #1 of ORDER BY is not in GROUP BY clause and contains nonaggregated column ‘’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 但是表数据成功插入

1 个赞

语法问题啊

1 个赞

就简单的insert into 插入,查询sql语句没有 group by order by

1 个赞

建议操作:1、br 备份B表
2、rename table B TO A;
3、 恢复B表

2 个赞

这样要倒腾两次,总的时间能省多少?TiDB支持对表进行Clone吗?

根据 TIDB老师讲解,目前大量数据备份恢复 使用BR 是速度最快的
没有克隆表

1 个赞

BR肯定快啊,因为BR是物理备份,之前用dumper做逻辑备份,备份慢,还原也慢~

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。