常见问题解答:数据库优化
如何减少内存使用量?
内存使用的主要来源是向量数据。有几种方法可以解决这个问题:
- 配置量化 (Quantization) 以减少向量的内存占用。
- 配置磁盘向量存储 (on-disk vector storage)。
选择哪种方法取决于您的需求。阅读更多关于如何配置 Qdrant 以达到最佳状态的信息。
如何选择机器配置?
就资源消耗而言,Qdrant 的使用场景主要有两种:
- 性能优化型 (Performance-optimized) – 当您需要尽可能快地提供向量搜索服务(高并发)时。在这种情况下,您需要尽可能多地将向量数据放入内存 (RAM) 中。请使用我们的计算器来估算所需的内存大小。
- 存储优化型 (Storage-optimized) – 当您需要存储大量向量并希望通过牺牲部分搜索速度来最小化成本时。在这种情况下,请更多地关注磁盘速度。有关此内容的详细信息,请参阅关于内存消耗的文章。
我已经配置了磁盘向量存储,但内存占用仍然很高。为什么?
首先,top 或 htop 等工具报告的内存指标可能会产生误导。它们显示的并非运行服务所需的最小内存量。如果常驻内存 (RSS) 使用量为 10 GB,并不意味着它无法在 8 GB 内存的机器上运行。
Qdrant 使用了多种技术来降低搜索延迟,包括将磁盘数据缓存在内存中以及从磁盘预加载数据到内存。因此,Qdrant 进程占用的内存可能会超过运行该服务所需的最小值。
未使用的内存就是浪费的内存。
如果您想限制服务的内存使用量,我们建议使用 Docker 或 Kubernetes 的资源限制功能。
我的请求非常慢或超时。我该怎么办?
造成这种情况有几个可能的原因:
- 在没有负载索引 (payload index) 的情况下使用过滤 – 如果您在执行搜索时使用了过滤条件,但没有配置负载索引,Qdrant 将不得不从磁盘加载全部负载数据以检查过滤条件。请确保您已正确配置了负载索引。
- 在慢速磁盘上使用磁盘向量存储 – 如果您使用的是磁盘向量存储,请确保您的磁盘速度足够快。我们建议使用 IOPS 至少达到 50k 的本地 SSD。请参阅关于内存消耗的文章,了解更多关于磁盘速度对搜索延迟影响的内容。
- 过大的 limit 值或非最优的查询参数 – 过大的 limit 或 offset 值可能会导致严重的性能下降。请密切关注与默认值有显著差异的查询/集合参数。它们可能是导致性能问题的原因。