如何能提高insert into select的速度?

单表数据量16GB,2亿条数据,想通过insert into select的方式复制表,实际测得速度大概只有1秒1-2万条数据被写入;
我的SQL:

SET @@SESSION.autocommit = 1;
SET @@SESSION.tidb_batch_insert = 1;
SET @@SESSION.tidb_batch_delete = 1;
SET @@SESSION.tidb_dml_batch_size = 1000;
insert into table_b select * from table_a;

可以试试非事务语句
https://docs.pingcap.com/zh/tidb/stable/sql-statement-batch

这个也试过了,区别不大,而且不支持子查询,很多东西实现不了

那你用dumpling导出 再用lightning导入,这个快

1 个赞

用dumpling导出成csv再导入是不是更简单点

拆批并发搞,没并发很慢的,或者就像楼上说的dumpling+lightning

1 个赞

现在可能还是 dumpling+lightning 比较快。。后续新的版本会出 import into select,速度更快

import into select在7.5 已经更新了,其实还是lightning

额,这也太麻烦了,目前用的是DataX,速度还行,其实原理就是多并发分段跑insert into select,后面我再试试用TiSpark做insert会不会快点

建议使用官方推荐的迁移工具速度会快一些,或者使用数据抽取工具,比如你说的DataX之类的,创建多个管道任务并行执行(将数据按一定条件切割,每个任务执行一批数据的处理),速度会更快

dumpling导出成csv或者用datax工具

同意楼上的,用导出工具应该更好一些

:thinking:直接有sql语句估计没有太大的变化了,考虑辅助工具吧,我一般用kettle,支持多线程批量插入。速度还挺快的。

测了一下TiSpark执行insert into select,速度还可以,数据加工+插入1亿条数据,只用了1个半小时,这还是在Spark资源吃紧的情况下,如果资源足够,应该能更快

楼主知道这个参数的应该是老用户了吧,可以使用dumpling 导出和lightning 导入,速度很快的。

这两个工具用tiup可以执行命令使用,也是两条命令就完成导出导入了,方便快捷

还不如先导出,再导入

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