【详述】
语句结构为“insert into select … from A left join B left join C… where A.some_time>=‘xxxx’ and A.some_time<‘xxxx’ and …”。
总共查询插入约800列,from后面有23个表连接,均为left join,其中较大表数据量分别为7700万(A表)、6580万、1760万、2691万、1121万行。
直接执行,大概率得到“Memory of process exceed limit. Pipeline Backend: starrockscluster-prod-be-0.starrockscluster-prod-be-search.starrocks.svc.cluster.local, fragment: 72343b20-28b2-11ef-b90e-02550afe42cf Used: 104428115156, Limit: 104367705292. Mem usage has exceed the limit of BE”错误,偶现“Communications link failure\n\nThe last packet successfully received from the server was 300,128 milliseconds ago. The last packet sent successfully to the server was 300,131 milliseconds ago.”错误。
尝试在语句前增加"set query_timeout=7200,enable_spill=true",甚至“spill_mode=force”,但未产生效果,错误依旧。
保留from与where不变,仅将insert删除,改为select count(1)进行行数统计仅需2s即可得到结果为22.7万行,可见最终命中数据量并不大。
【业务影响】数仓模型计算及后续报表产出
【是否存算分离】否
【StarRocks版本】3.1.5
【集群规模】2fe + 7be
【机器信息】每个BE=12cores/120GB mem/200GB专用spill盘
【联系方式】社区群14 CrazyRen
【附件】