升级到8.1后, 报mpp错误

【 TiDB 使用环境】生产环境
【 TiDB 版本】
【复现路径】
【遇到的问题:问题现象及影响】
执行sql:
select distinct t1.name , t1.pid as RK_pid , t1.times as RK_times from database1.test1 t1 where (t1.times=‘1’ and t1.pid=‘P0000904975-0’) or (t1.times=‘1’ and t1.pid=‘P0000900320-0’) or (t1.times=‘5’ and t1.pid=‘P0000852293-0’) or (t1.times=‘12’ and t1.pid=‘P0000902892-0’) )

报错:
other error for mpp stream: Code: 10, e.displayText() = DB::Exception: Not found column generated_column_2 in block. There are only columns: pid, times, name, e.what() = DB::Exception

sql里面没有用到generated_column_2字段, 表里面也没有generated_column_2字段,mpp是开启的, 怀疑是执行计划优化后, 生成的该字段

提示没有id字段

不是, 有这个字段(sql写错了, 是pid)

表结构啥样 ,有生成列吗

有生成列, 我估计是8.1后, 某些情况会走mpp, 但是不支持生成列, 然后就报错了, 目前只能做兼容,如果是mpp报错, 就session级别关闭mpp, 然后就成功了

Query fail when there are timestamp or time columns after generated column · Issue #7468 · pingcap/tiflash · GitHub 有个这个bug 有时间列和生成列时会触发这报错,6.5.3版本开始修复了,不排除新版又有这问题了

1 个赞

有时间列, 看来是8.1又有这个问题了

  1. Query fail when there are timestamp or time columns after generated column · Issue #7468 · pingcap/tiflash · GitHub 这个问题在 8.1.0 版本上已经 fix 了,也有回归测试覆盖。你的查询报错可能是类似的,但是另外一个新的代码问题
  2. 能否贴一下 database1.test1 这个表的表结构以及查询出错时的 explain analyze 执行计划?我们看能否复现这个问题,方便定位问题根因以及在后续版本中修复

tidb-mpp-exception (4.3 KB)
这个问题不是稳定复现的

other error for mpp stream: Code: 10, e.displayText() = DB::Exception: Not found column generated_column_2 in block. There are only columns: pid, times, name, e.what() = DB::Exception

请问一下能否从 error 日志里捞一下这条报错的完整版,里面有堆栈。

java.sql.SQLException: other error for mpp stream: Code: 10, e.displayText() = DB::Exception: Not found column generated_column_8 in block. There are only columns: patient_id, times, name, request_day, unit_code, doctor_code, op_day, serial_no, sub_request_day, trim_patient_id, e.what() = DB::Exception,
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1201)
at com.alibaba.druid.pool.DruidPooledStatement.executeQuery(DruidPooledStatement.java:217)
堆栈信息打的比较少, 执行后就直接报错了, 没答应mpp相关的信息

找到一个类似的问题,但不完全一样,正在尝试复现。

另外可以到 tiflash 日志里面找下报错的堆栈吗,可以快速定位是哪个模块的问题

表结构得贴