跳转至

故障排除

本文档提供了使用 GoVector 时可能遇到的常见问题的解决方案。它涵盖了错误消息、性能问题和其他常见问题。

🚩 常见错误消息

维度不匹配

错误dimension mismatch

原因:向量维度与集合的配置维度不匹配。

解决方案: - 确保所有向量的维度与集合配置相同 - 检查集合的 VectorLen 参数 - 验证您的嵌入模型是否生成正确维度的向量

内存不足

错误out of memory

原因:集合对于可用内存来说太大。

解决方案: - 启 SQ8 量化以减少约 75% 的内存使用 - 对 HNSW 索引使用较小的 M 值 - 考虑对小型数据集使用 Flat 索引 - 增加应用程序的内存分配

集合未找到

错误collection not found

原因:指定的集合不存在。

解决方案: - 检查集合名称是否有拼写错误 - 验证集合是否成功创建 - 确保您使用的是正确的数据目录

点未找到

错误point not found

原因:指定的点 ID 在集合中不存在。

解决方案: - 检查点 ID 是否有拼写错误 - 验证点是否成功写入 - 确保您使用的是正确的集合

📊 性能问题

搜索缓慢

症状:搜索操作比预期花费更长时间。

可能原因: - HNSW 参数不当 - 结果集过大 - 复杂的过滤器 - 磁盘 I/O 缓慢

解决方案: - 增加 EfSearch 参数以获得更好的召回率(但搜索更慢) - 减少 EfSearch 参数以加快搜索速度(但召回率更低) - 使用更具选择性的过滤器以减少结果集大小 - 使用 SSD 存储以获得更好的 I/O 性能 - 启 SQ8 量化以减少内存使用

写入缓慢

症状:写入操作比预期花费更长时间。

可能原因: - 批处理大小过大 - EfConstruction 参数过高 - 磁盘 I/O 缓慢 - 禁用量化

解决方案: - 使用适当的批处理大小(每批 100-1000 个点) - 根据数据集大小调整 EfConstruction 参数 - 使用 SSD 存储以获得更好的 I/O 性能 - 对于写入密集型工作负载,考虑禁用量化

内存使用高

症状:GoVector 使用的内存比预期多。

可能原因: - 大型数据集未启量化 - HNSW 索引的 M 值过高 - 同时加载多个集合

解决方案: - 启 SQ8 量化以减少内存使用 - 对 HNSW 索引使用较小的 M 值 - 仅加载必要的集合 - 考虑在多个实例之间进行分片

🔧 配置问题

度量选择错误

症状:搜索结果与预期相似度不匹配。

原因:距离度量与您的用例不匹配。

解决方案: - 对归一化向量使用 Cosine - 对非归一化向量使用 Euclidean - 对某些特定用例使用 Dot

索引参数

症状:搜索性能或召回率不佳。

原因:HNSW 索引参数未针对您的数据集进行优化。

解决方案: - 对于小型数据集(10,000-100,000 点):M=12, EfConstruction=100 - 对于中型数据集(100,000-1,000,000 点):M=16, EfConstruction=200 - 对于大型数据集(1,000,000+ 点):M=24, EfConstruction=400

🛡️ 安全问题

未授权访问

症状:未授权用户可以访问 API。

原因:未配置认证。

解决方案: - 使用带有认证的反向代理 - 限制对可信客户端的网络访问 - 在生产环境中使用 HTTPS

数据泄露

症状:敏感数据被暴露。

原因:Payload 包含敏感信息。

解决方案: - 不要在 payload 中存储敏感信息 - 对敏感数据使用加密 - 实现适当的访问控制

💾 存储问题

数据损坏

症状:集合无法加载或返回不正确的数据。

原因:意外关闭、磁盘错误或文件损坏。

解决方案: - 从备份恢复 - 使用日志文件系统 - 实现适当的错误处理 - 定期验证数据完整性

磁盘空间问题

症状:磁盘空间不足。

原因:大型向量、未启量化或过多的 payload。

解决方案: - 启 SQ8 量化 - 优化 payload 大小 - 尽可能使用较小的向量 - 清理旧集合

📡 网络问题

连接被拒绝

症状:无法连接到 GoVector 服务器。

原因: - 服务器未运行 - 主机或端口不正确 - 防火墙阻止访问

解决方案: - 启动 GoVector 服务器 - 验证主机和端口配置 - 检查防火墙设置

超时

症状:API 请求超时。

原因: - 服务器性能缓慢 - 网络延迟 - 结果集过大

解决方案: - 优化服务器性能 - 使用适当的批处理大小 - 减少结果集大小 - 检查网络连接

❓ 常见问题

如何在 HNSW 和 Flat 索引之间选择?

答案: - 对大型数据集(10,000+ 点)使用 HNSW,其中搜索性能很重要 - 对小型数据集(< 10,000 点)使用 Flat,其中准确性至关重要

如何优化内存使用?

答案: - 启 SQ8 量化 - 对 HNSW 索引使用较小的 M 值 - 仅加载必要的集合 - 考虑对小型数据集使用 Flat 索引

如何备份 GoVector 数据?

答案: - 定期复制数据目录 - 使用自动备份工具 - 定期测试恢复过程

如何扩展 GoVector?

答案: - 使用多个集合来分散负载 - 考虑在多个实例之间进行分片 - 对微服务模式使用负载均衡 - 针对您的数据集优化 HNSW 参数

如何与其他语言集成?

答案: - 使用带有 HTTP API 的微服务模式 - 使用现有的 Qdrant 客户端 - 为特定语言实现自定义客户端

🔗 相关文档