问题:
遇到一个奇怪的问题,SQL执行正常,但如果查询的时间段超过一个月则执行报错。
环境信息
select current_version() as version;
-- 3.3.20-1.3.0-202512081638-7f00bc3
查询SQL如下
whit data_top as (select * from table_name where day between '2025-01-01' and '2025-02-01'-- and rn <= 20
)
,data_cte2 as (
select count(1) as cnt data_top where rn <= 20
)
select data_cte2
limit 10
;
报错信息如下
TASK-MESSAGE:
FAILED: no executable plan for this sql. group: -> Group: 87
{root group 87 root operator: LogicalCTEAnchorOperator{cteId='1'} child: 5, 86}. required property: EMPTY SORT, EMPTY DISTRIBUTION, EMPTY CTE
排查原因
-- 设置这个参数后可正常执行
SET cbo_cte_reuse = false;
设置此参数后可正常查询出结果,查看官方文档,可见是CTE在BE中的缓存,默认只有512M,可推测出是因为CTE超过512M导致OOM,从而时间段短时正常,时间段长时SQL执行则报错。
优化方面:减少CTE中数据量,在CTE中汇总后再查询和关联。
https://docs.starrocks.io/zh/docs/3.3/using_starrocks/caching/query_cache/#采用-cte-优化的-distinct-查询不使用-query-cache
