tidb panic error

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
v4.0.8
【问题描述】

在客户端中带上变量值单独执行SQL “SELECT aaa from bbb WHERE uid = ?” 不会报错
在代码中执行偶尔会报错,不是必现。集群没有开启 plan cache,没有使用multi-statement。
执行这样的代码会报错:
tidb的日志发现确实有 panic error

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

这个好像是已知的bug,需要确认一下

这个应该是在 v4.0.3 修复了,但是看你是 v4.0.8 ?

是4.0.8

收到,需要看一下

1.这个问题定位是一个 bug,我们内部已经复现,issue: https://github.com/pingcap/tidb/issues/24741
2.触发条件:
(1)point get (点查 SQL 语句)先做了 prepare,然后在 autocommit 模式下执行了一次,这时执行计划会被缓存
(2)再 begin 或者 start transaction
(3)再用相同的 preapre stmt 执行 point get,这里缓存的执行计划被错误启用,在 v4.0 导致 panic
3.修复方法:
(1)临时方法:在 start transaction 之后,对于需要执行的 point get 语句不使用 prepare statement 协议,或者重新 prepare 一次,使用新 prepare 的 stmt 来执行(prepare statement 协议这个客户端可以控制,jdbc 一般来说都会用)
(2)v4.0.13 新版本中会进行修复;
(3)如果比较紧急,只能提供 hotfix 去修复。