bug: Scores page fails on ClickHouse 26.6 with FINAL LEFT JOIN query

该报错通常发生在自托管 Langfuse 搭配 ClickHouse 26.x 时,Scores 页面因查询优化器对 FINAL LEFT JOIN 查询的错误改写而卡在加载骨架。优先排查 ClickHouse 查询优化器设置,以及 Langfuse 容器是否启用了 CLICKHOUSE_DISAB

快速结论:该报错通常发生在自托管 Langfuse 搭配 ClickHouse 26.x 时,Scores 页面因查询优化器对 FINAL LEFT JOIN 查询的错误改写而卡在加载骨架。优先排查 ClickHouse 查询优化器设置,以及 Langfuse 容器是否启用了 CLICKHOUSE_DISABLE_LAZY_MATERIALIZATION

适用环境:Langfuse OSS v3.225.1(Docker Compose 部署);ClickHouse v26.6.2.81。Issue 中未涉及 Python、CUDA、显卡等环境,故不列出。

最快修复方案:在 Langfuse 容器上设置环境变量 CLICKHOUSE_DISABLE_LAZY_MATERIALIZATION=true,该方案由 Dosu 机器人基于历史 Issue 给出,可优先尝试。

注意事项:该环境变量方案来自 Langfuse 团队的机器人回复,Issue 提交者尚未在评论中确认最终效果;若无效,可回退到 Issue 提交者亲测有效的全局方案:在 ClickHouse 配置中设置 query_plan_enable_optimizations=0,但这一方案会对所有查询禁用优化,影响面更大。

问题场景

自托管 Langfuse 中,打开 Evaluation 下的 Scores 页面时,表格一直停留在加载骨架状态;离开该页面时触发 Internal Server Error,路径为 scores.all。该问题由 Scores 后端查询使用 FINALLEFT JOIN 组合触发,且仅在 ClickHouse 26.x 上复现。用户通过 LLM-as-a-Judge 评估器创建评分后即可稳定触发。

报错原文

bug: Scores page fails on ClickHouse 26.6 with FINAL LEFT JOIN query

Internal Server Error
Path: scores.all

The failure is reproducible on ClickHouse 26.6.2.81 when querying scores
with FINAL, a LEFT JOIN to traces, selected trace fields, and score filters.

原因分析

可能原因是 ClickHouse 26.x 默认启用的新查询分析器(query analyzer)在处理 FINAL + LEFT JOIN 组合时,错误地将合法的 AND 关键字条件改写为 and() 函数调用语法,导致查询执行失败。这正是 scores.all 查询所使用的语句形态。Issue 提交者已提供最小复现 SQL,并确认全局禁用 ClickHouse 查询计划优化可解决此问题,佐证了优化器改写出错这一方向。

环境排查

  • 确认 ClickHouse 主版本是否为 26.x(Issue 中复现版本为 26.6.2.81)。
  • 确认 Langfuse 版本是否低于 v3.225.1(该版本已包含自动版本检测逻辑,理论上应能自动应用修复)。
  • 若无 Docker Compose 部署文件,无法自动注入环境变量时,需手动检查容器环境变量配置。
  • 检查 ClickHouse 配置文件中是否存在 query_plan_enable_optimizationsallow_experimental_analyzer 等自定义项。

解决步骤

  1. 首选方案:在 Langfuse 容器中设置环境变量 CLICKHOUSE_DISABLE_LAZY_MATERIALIZATION=true,然后重启 Langfuse 容器。该方案只禁用触发问题的单个优化器,影响面较小。
  2. 备用方案:将 ClickHouse 的 docker-compose.yml 中镜像版本固定为 24.3(Langfuse 官方生产 compose 文件已采用此版本)。
  3. 兜底方案:在 ClickHouse 配置文件中加入 query_plan_enable_optimizations=0,此方案被 Issue 提交者验证有效,但会全局禁用查询计划优化,影响所有查询性能,优先级建议最低。
  4. 若采用兜底方案,需在 ClickHouse 容器的 config.d 目录下新建配置文件并重启 ClickHouse。

验证方法

修复后重新打开 Evaluation 下的 Scores 页面,确认表格不再停留在加载骨架状态,且可以正常显示评分数据。同时可尝试切换评分筛选条件,确保查询在带 FINALLEFT JOIN 的正常路径下稳定执行。为彻底验证,可退出页面再重新进入同一路径,确认不再出现 Internal Server Error

参考来源

langfuse/langfuse #15977

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18294

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注