insert into select 非常慢

【详述】构建数仓,从ods表 insert into select 创建插入数据到新表,速度很慢。
【背景】首先建了一张sr的明细表,并设置了桶,没有设置分区
【业务影响】插入数据慢
【StarRocks版本】2.2.2
【集群规模】3fe(3 follower)+5be
【机器信息】CPU虚拟核/内存/网卡,32C/256G/千兆,全ssd磁盘
【附件】

  • 慢查询:
    • Profile信息
    • 并行度:show variables like ‘%parallel_fragment_exec_instance_num%’; —16
    • cbo是否开启:show variables like ‘%cbo%’; —开启
    • 任务内存分配单节点32G,资源充足
      sql:

profile:(生产环境,不方便下载,直接截图)


数据量补充说明:
源表数据量1.7亿(单条数据量小),列转行后是7倍,差不多近12亿数据。执行完耗时17分钟。

对比说明:为什么感觉比较慢,是因为我们还有一套环境,是grenplum集群,性能和资源都远远赶不上sr集群,并且磁盘还不是ssd的。同样的sql执行,3分钟完成。所以想知道有什么办法调优,还是说sr本身不擅长做这样的操作。

发个Profile

这个是怎么操作啊

ods是本地表,还是外部表呢?貌似这个爆炸函数确实有点慢,

都是本地表。另外问一下,insert into select的sql语句,也是按sr文档生成profile文件吗?

比greenplum速度慢了很多。而且感觉是insert into的步骤慢

请问一下,insert into慢,这个问题怎么分析解决?

先提供一个Profile
获取方法: 获取Profile,通过Profile分析查询瓶颈

你好,我的sql语句如下:


插入的表结构如下:
1657679855005

profile文件详见附件。

主要时间花在了senddata上,不知道是否更好的提升数据的速度的方法。
机器是:机器一共8台,每个都是32C/256G/千兆,全ssd磁盘。
带宽有点小,除此之外有什么优化方法吗?profile (24.3 KB)

  1. 分桶可以再调大点,然后开启pipeline
  2. colaesce 这个函数可以考虑换成 if 函数

另外可以提供一个GP的profile

源表有1.7亿数据,磁盘空间47G多,开始设置了6个分桶,导致读取性能受限。根据你的建议改成48个桶,现在速度提升到2min40s,可以接受。
感谢