从2.5.21升级到3.1.12 窗口函数相关sql耗时增加较大

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】
近期从2.5.21 --> 3.0.9 --> 3.1.12 升级到了3.1.12版本,升级后窗口函数语句耗时增加异常多,相同的语句在2.5.21耗时6秒不到,在3.1.12上执行20多分钟出不了结果,查询语句如下
select
a.merc_code,
dense_rank() over(order by cast(ifnull(d.m_net_trade_amt,0) as decimal(16,2)) desc) as m_net_trade_amt_rank
from
merc_info_20240510 a
left join
y_trade_statis d
on a.merc_code = d.merc_code;

【背景】
【业务影响】窗口函数相关sql功能耗时增加
【是否存算分离】否
【StarRocks版本】3.1.12
【集群规模】:3fe(3 follower)+12be(3个be与fe混部)
【机器信息】CPU虚拟核/内存/网卡,40C/128G/万兆
【联系方式】StarRocks社区群5 -思变 [1412195108@qq.com]
【附件】

3.1.12版本执行计划.txt (1.5 KB) 建表语句.txt (1.5 KB) 2.5.21版本查询profile.txt (47.1 KB) 2.5.21版本执行计划.txt (1.5 KB) 3.1.12版本查询profile.txt (70.1 KB)

select
a.merc_code,
dense_rank() over(order by cast(case d.m_net_trade_amt when null then 0 else d.m_net_trade_amt end as decimal(16,2)) desc) as m_net_trade_amt_rank
from
merc_info_20240510 a
left join
y_trade_statis d
on a.merc_code = d.merc_code

ifnull(d.m_net_trade_amt,0) 改写为case d.m_net_trade_amt when null then 0 else d.m_net_trade_amt end 耗时降低为4s出查询结果,profile如下
3.1.12版本改写后profile.txt (70.4 KB)

你这个是因为结果集太大了吧 image

看起来很大概率是你的client和server不在一个网段里,受到带宽影响

升级前后应用架构是一样的

你在FE机器上执行下这个SQL,看下耗时

一样慢,问题应该不在这

设置这个变量,然后跑下看看 set enable_parallel_merge=false;

修改这个变量确实就快了,这个变量是做什么用的,官方文档没查到

能打一个perf吗?

enable_parallel_merge=false 后的profile和explain costs如下

3.1.12版本调整变量enable_parallel_merge=false后的explain costs.txt (5.0 KB) 3.1.12版本调整变量enable_parallel_merge=false后profile.txt (64.9 KB)

这个join 去掉能复现吗?

join怎么去掉?

by https://github.com/StarRocks/starrocks/pull/35899