bug: Had to turn off query_plan_optimize_lazy_materialization in ClickHouse to prevent errors with `Scores`

在自托管的 Langfuse 环境中,用户通过 Web 界面访问项目的 Scores 页面(左侧菜单)时,ClickHouse 抛出异常导致查询失败。已知受影响的版本组合为 Langfuse 3.188.0 与 ClickHouse 26.5.1.882。

bug: Had to turn off query_plan_optimize_lazy_materialization in ClickHouse to prevent errors with `Scores`

bug: Had to turn off query_plan_optimize_lazy_materialization in ClickHouse to prevent errors with `Scores`

快速结论:当使用 Langfuse 自托管部署,且搭配 ClickHouse 26.x 版本时,访问 Scores 页面可能触发 NOT_FOUND_COLUMN_IN_BLOCK 崩溃。优先检查 ClickHouse 版本和 query_plan_optimize_lazy_materialization 设置。

问题场景

在自托管的 Langfuse 环境中,用户通过 Web 界面访问项目的 Scores 页面(左侧菜单)时,ClickHouse 抛出异常导致查询失败。已知受影响的版本组合为 Langfuse 3.188.0 与 ClickHouse 26.5.1.882。

报错原文

Code: 10. DB::Exception: Not found column and(equals(__table1.project_id, '[REDACTED_PROJECT_ID]'_String), in(__table1.data_type, __set_String_7806885024967049900_11826187103487421056), notIn(__table1.environment, __set_LowCardinality(String)_18272326867462620477_14610479355148930747), greaterOrEquals(__table1.timestamp, _CAST('1781683861.228'_DateTime64(3), 'DateTime64(3)'_String)), lessOrEquals(__table1.timestamp, _CAST('1781770261.228'_DateTime64(3), 'DateTime64(3)'_String))): in block __table1.id String String(size = 0), __table1.project_id String String(size = 0)... [Truncated for brevity] ... (NOT_FOUND_COLUMN_IN_BLOCK)

原因分析

ClickHouse 26.x 版本引入了新的查询分析器(analyzer),其懒物化(lazy materialization)优化特性与 Langfuse 在 getScoresUiGeneric 查询中构建的复合 WHERE 谓词存在不兼容。具体表现为查询优化器在尝试优化时,错误地从数据块中查找不存在的列,导致崩溃。

环境排查

  • Langfuse 版本(例如 3.188.0)
  • ClickHouse 版本(例如 26.5.1.882)
  • ClickHouse 配置项 query_plan_optimize_lazy_materialization 状态(默认开启,下坠后可能需要显式关闭)
  • Langfuse 环境变量 CLICKHOUSE_DISABLE_LAZY_MATERIALIZATION 的值("true""auto"

解决步骤

  1. 方法一(推荐,可优先尝试): 在 Langfuse 的 Web 和 Worker 容器中设置环境变量 CLICKHOUSE_DISABLE_LAZY_MATERIALIZATION"true",这等效于在 ClickHouse 配置中禁用 query_plan_optimize_lazy_materialization
  2. 方法二: 直接修改 ClickHouse 的 users.xml 配置文件,在 <default> profile 下添加:
    <query_plan_optimize_lazy_materialization>0</query_plan_optimize_lazy_materialization>
  3. 方法三(临时规避): 将 ClickHouse 降级到 25.5.2 版本,该版本不存在此兼容性问题。
  4. 注意: 更新到较新的 Langfuse 版本后,CLICKHOUSE_DISABLE_LAZY_MATERIALIZATION 的默认值可能已改为 "auto",Langfuse 会自动检测 ClickHouse 版本并应用必要的兼容性设置,无需手动配置。

验证方法

应用上述任一修复方案后,重新通过 Web 界面访问项目的 Scores 页面。如果页面正常加载数据且无错误日志,则说明问题已解决。

参考来源

langfuse/langfuse #14349

celebrityanime
celebrityanime
文章: 8687

发表回复

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