tiflash 执行计划未选择1阶段agg 导致oom

【TiDB 版本】8.5.2

2个表关联,先通过cte方式聚合,然后cte聚合结果再关联聚合, cte内单表SQL 执行时走的2阶段agg,导致oom , 通过cte内SQL 加 一阶段agg HINT , SQL正常执行。

按照tiflash源码解析中一段描述,系统可以自动选择使用1还是2阶段方式

手工重新收集了其中一个表的信息后,查看执行计划仍然是2阶段agg ,group by 聚合的多个id列字段,属于重复值比较低的情况

plan replayer信息如下
tiflash_plan.zip (62.9 MB)

试了 tiflash_hashagg_preaggregation_mode auto/force_streaming 都不好使 ,只有用hint才行

没遇到过呢,是不是数据量太大了

看起来是那里选择agg1 还是agg2 的时候,对统计信息的处理有问题。

https://github.com/pingcap/tidb/commits/master/?author=hawkingrei

hint的重要性,能解决一些优化器走不是最优路线的情况

先试一试 tiflash_hashagg_preaggregation_mode 改成 auto 看看

我之前说是有别的bug 再修,不是正在修这个问题

auto 也不好使!?

我们的业务也发现经常不走tiflash,办法就是加hit

嗯 试了auto force都不行

1 个赞

这不算极端或特殊场景