diff --git a/migrations/358_documents_embedding_hnsw.sql b/migrations/358_documents_embedding_hnsw.sql new file mode 100644 index 0000000..5fc2016 --- /dev/null +++ b/migrations/358_documents_embedding_hnsw.sql @@ -0,0 +1,11 @@ +-- 358: documents.embedding HNSW 벡터 인덱스 + hnsw.ef_search (검색 latency T3, 2026-06-15) +-- PROD 적용 = CREATE INDEX CONCURRENTLY 로 수동 빌드(40k rows 무중단, /dev/shm 회피 위해 단일 스레드) +-- + schema_migrations(358) 수동 기록 완료. runner 는 단일 트랜잭션이라 CONCURRENTLY 불가. +-- 본 파일 = fresh-init/재현용: non-concurrent IF NOT EXISTS (빈 테이블 init 시 즉시, 기존 index 존재 시 no-op). +CREATE INDEX IF NOT EXISTS idx_documents_embedding_hnsw + ON documents USING hnsw (embedding vector_cosine_ops) + WHERE (deleted_at IS NULL AND embedding IS NOT NULL); + +-- docs vector leg LIMIT = limit*4 (기본 80) → HNSW recall 위해 ef_search >= 80 필요. +-- ivfflat.probes=20 과 동일하게 DB 레벨 GUC (ALTER DATABASE) 로 설정. +ALTER DATABASE pkm SET hnsw.ef_search = 100;