join 后tidb-server oom

您好 我在有三个表,数据分别为10万 0条 3.5亿,
查询语句如下 什么计算都没有
EXPLAIN
SELECT name
from t1 t1
inner join t2 t2 on t1.name = t2.name
group by name
然后三张表进行inner join 结果发现3.5亿数据task中存在root,然后tidb-server会造成oom,
但是我10万与3.5亿俩个表inner join root会只有10万 不会造成tidb-server oom
麻烦问一下这种情况我应该怎样处理???
下面分别是俩个sql的执行计划

3表关联的SQL 、执行计划、tidb 的内存参数配置发下

内存16G,执行sql如下
t1 10万 t2 0条 t3 3.5亿
EXPLAIN
SELECT name
from t1 t1
inner join t2 t2 on t1.name = t2.name
inner join t3 t3 on t1.name = t3.name
group by name

SELECT /*+ READ_FROM_STORAGE(TIKV[t3]) */… 加这个提示看看,t3不走tiflash

hi h5n1 我把sql添加上了你的这个执行计划走的tikv,但是root还是存在3.5亿,

EXPLAIN
SELECT
/*+ read_from_storage(tikv[t3]) */
t1.name
from t1 t1
inner join t2 t2 on t1.name = t2.name
inner join t3 t3 on t1.name = t3.name
group by name

客户端连接可能需要设置–comments 识别hint。 另外可试试将t1 t2也设置tiflash看看能否将join下推到tiflash完成

刚试了下所有表都设置tiflash 然后都设置成tikv,t3设置成tiflash或者tikv都会往root发送3.5亿数据,
您客户端连接需要设置–comments是什么意思呢?

,你的设置操作是SQL里的hint设置还是设置t1 t2 增加tiflash 副本。

直接这样设置的
SELECT
/*+ read_from_storage(tiflash[t1]) /
/
+ read_from_storage(tiflash[t2]) /
/
+ read_from_storage(tiflash[t3]) */

把t1 t2也设置tiflash副本,5.0后mpp模式支持join下推,

1 个赞

好的 谢谢

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。