Prepared Statements

Apache Doris PreparedStatement 之谜

使用的 Apache Doris 版本:3.0.3, 对应的 Doris 源码如果没有特意说明,均为 3.0.3 版本。

背景 #

运营反馈了一些业务异常,这些异常都指向了一个 Doris 数据查询服务(后都用 DQ-1 指代),该服务日志中存在大量的错误日志,如下:

platformAwardBiz.GetByID failed: Error 1047 (08S01): msg: Not supported such prepared statement

日志中发现,全部的查询均报了 Not supported such prepared statement 错误,而不是存在特定的查询语句。而与此同时,另外的 Doris 查询服务 (后使用 DQ-2 指代) 并没有出现该错误日志。

DQ-1 使用 golang 编写,使用了 gorm 作为连接 Doris 的查询工具。DQ-2 使用了 python3编写,使用了 pymysql 作为连接 Doris 的查询工具。

发现问题后,猜测是 prepared statement 机制的相关问题,快速解决方案选择了重启 DQ-1 和 Doris FE 节点,然后错误消失。

问题分析 #

首先从日志入手,采集了 FE 的错误日志,但经过排查没有发现明显的异常日志。经过检索搜索引擎和社区,也没有发现有相关的 issue。

那只能从源码入手了。在进去源码分析之前,这里带着几个疑问:

...

访问量 访客数