[Bug] 同库多文档并行向量化时并发创建 HNSW 索引报 DuplicateTable,导致整库向量化任务失败
メンテナーはふだん 1 日以内に返信
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 22/100
調査の方向性
Start with create_knowledge_index() in apps/knowledge/serializers/common.py, which checks pg_indexes before running CREATE INDEX, and with embedding_by_document() in apps/common/event/listener_manage.py, which calls it at the end of each document. Reproduce by running parallel document embedding tasks on one knowledge base. Done means concurrent index creation no longer fails the tasks. PR #7603 is already open against this issue, so review it before starting.
索引モデルが issue の本文から書いたものです。
説明
MaxKB 版本
v2.10.x(社区版源码核实存在;生产环境为 v2 定制部署,2026-10 复现)
请描述您遇到的问题
对同一个知识库执行整库向量化/重嵌入时,同库多个文档并行向量化,任务批量报错失败。数据库报 DuplicateTable: relation "embedding_hnsw_idx_<knowledge_id>" already exists。
复现步骤
- 准备一个知识库,包含较多文档(我们场景为 27 个文档、491 个段落)
- 对该库执行向量化任务,使多个文档并行处理(库级嵌入任务会向每个文档派发并行子任务)
- 观察日志:多数文档向量化完成后,在创建知识库 HNSW 索引阶段出现报错,除第一个创建成功的文档外,其余并发文档任务全部失败
日志关键片段(已脱敏):
19:01:00 Dropped index for knowledge ID: <kb_id>
19:01:00~19:01:16 491 个段落向量化全部完成(27 个文档并行)
19:01:01 ERROR 向量文档: <doc_id> 错误:
psycopg.errors.DuplicateTable: relation "embedding_hnsw_idx_<kb_id>" already exists
原因分析(源码定位)
apps/knowledge/serializers/common.py 中 create_knowledge_index() 的逻辑是:
先查询 pg_indexes 判断索引是否存在,不存在则执行 CREATE INDEX。
apps/common/event/listener_manage.py 中 embedding_by_document() 在每个文档向量化收尾时都会调用该方法。
同库多文档并行时,多个任务同时通过"索引不存在"检查,随后并发执行 CREATE INDEX:第一个成功,其余全部因索引已存在而抛 ProgrammingError,导致这些文档的向量化任务整体失败。
预期的正确行为
并发的索引创建请求不应导致向量化任务失败。
环境信息
- 部署方式:Docker
- 数据库:PostgreSQL + pgvector(per-KB 部分索引
embedding_hnsw_idx_{knowledge_id})
- 主要言語
- Python
- スター
- 23.1k
- フォーク
- 3.2k
- 平均マージ
- 41分
- マージ済み PR(30日)
- 480
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
1Panel-dev/MaxKB のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
1Panel-dev/MaxKB#7780 ·
メンテナーはふだん 1 日以内に返信
-
[Bug] 默认用cas登录 退出后自动又登录进去了対応中かも @zyyfit が今日担当しました。 オープン
1Panel-dev/MaxKB#7828 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
[Bug] 上传excel长文件 上传的文档跟文档内容提取的顺序不一致対応中かも @zyyfit が 1 日前に担当しました。 オープン
1Panel-dev/MaxKB#7809 · コメント 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
[Bug] 用户组加载大量用户之后页面崩了対応中かも @zyyfit が 1 日前に担当しました。 オープン
1Panel-dev/MaxKB#7798 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
[Feature] 输入栏支持快捷标签対応中かも @baixin513 が 2 日前に担当しました。 オープン
1Panel-dev/MaxKB#7747 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
1Panel-dev/MaxKB の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
UKGovernmentBEIS/inspect_ai#6512 ·
メンテナーはふだん 1 日以内に返信
-
area/c++ area/core kind/bug-report
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
tensorflow/quantum#1140 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 68/100
Kav-K/GPTDiscord#501 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
UKGovernmentBEIS/inspect_evals#2863 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信