tiflash 查询报错 tree struct based executor must have executor id

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】tidb 集群版本 4.0.8,新加 2个 tiflash节点 版本 4.0.8

【概述】 单表查询,查询条件多时 tiflash报错 tree struct based executor must have executor id

【背景】
表 t : 数据量约1.5亿
create table t (c1 varchar(8),
c2 varchar(100),
c3 varchar(100),
c4 decimal(22,6),

key(c1,c2,c3));

查询SQL1:
select c1,c2,c3,c4
from t
where c1=‘xxx’
and c2 in (‘xx1’,‘xx2’ …<约50个>)
and ( c3 like ‘xxx1%’ or c3 like ‘xxx2%’ or c3 like ‘xxx3%’ … <约350个> );

直接执行查询SQL1,显示查询成功,执行计划显示使用的是 tikv。cop[tikv]
设置 tidb_isolation_read_engines=“tiflash”; 再次执行SQL1,报错:
ERROR 1105: [FLASH: Coprocessor: BadRequest] Tree struct based executor must have executor id.
tiflash日志如下:

查询SQL2:
select c1,c2,c3,sum(c4)
from t
where c1=‘xxx’
and c2 in (‘xx1’,‘xx2’ …<约50个>)
and ( c3 like ‘xxx1%’ or c3 like ‘xxx2%’ or c3 like ‘xxx3%’ … <约350个> )
group by c1,c2,c3;

查询报错: ERROR 1105: [FLASH: Coprocessor: BadRequest] Tree struct based executor must have executor id.
改写查询SQL2, 将 ( c3 like ‘xxx1%’ or c3 like ‘xxx2%’ or c3 like ‘xxx3%’ … <约350个> ) 减少至 100 个条件,查询成功。

将查询SQL1 和 查询SQL2 放在 tiflash5.0.1版本上执行,均使用tiflash且执行成功。

【问题】
1、此报错是否与tiflash版本有关?tiflash 4.0.8版本是否有相应的解决方案?
2、如必须升级,使用什么版本比较合适?(读多写少场景,单表数据量基本都在亿级以上)


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

目前已知一个问题是 or 的数量过多的情况下,TiFlash 会出现 Tree struct based executor must have executor id. 报错,具体版本的修复情况,确认后,会继续跟帖 ~

这个 or 过多导致 TiFlash 报错的问题,确认是在 v5.0.1 版本 fix。所以如果要升级版本,那么建议升级到 v5.0.1 +。

当前已发版的 TiDB 版本:

  • 5.0 最新版本为 5.0.4
  • 5.1 最新版本为 5.1.2
  • 5.2 最新版本为 5.2.1

在版本选择上,可以看下各个版本的 release node 的描述,5.2.1 版本在性能和稳定都有较大提升。理论上,5.0.0 --> 5.1.0 ,5.1.0 --> 5.2.0 会新增 feature,5.0.1 --> 5.0.4 小版本升级更多的是 fix bug。建议你那边,按需选择版本 ~