配置Qdrant优化器以实现可预测的搜索延迟

配置Qdrant优化器以实现可预测的搜索延迟

💡 原文英文,约2300词,阅读约需9分钟。
📝

内容提要

本文通过基准测试,量化了Qdrant优化器配置对搜索延迟的影响。连续索引虽在加载后需恢复期,但稳态延迟可降180倍;启用prevent_unoptimized能大幅降低排空期延迟,但新点暂不可见。单段配置稳态最快但恢复慢,限制段大小则相反。串行化优化线程可平滑延迟但延长排空。提高删除阈值可避免真空干扰。建议根据负载权衡配置。

🔎

延伸解读

连续索引的恢复期代价

连续索引在数据加载后需要一段恢复期,期间搜索延迟显著升高(中位数780毫秒,p95达2秒),但优化完成后延迟可降低180倍。禁用索引虽跳过恢复期,但稳态搜索退化为暴力扫描,延迟高达256.6毫秒。因此,若可接受短暂恢复期,连续索引是更优选择。

prevent_unoptimized 的权衡

启用prevent_unoptimized可将排空期延迟从780毫秒降至10.2毫秒,优化完成时间缩短至9分钟。但新写入的点在段优化完成前不可见,可能导致查询结果缺失。需注意将写入设为wait=false,避免阻塞。该功能仍为实验性,使用前应确认版本行为。

段大小与延迟的平衡

单段配置稳态延迟最低(3.2毫秒),但恢复时间超过1小时;限制段大小(如100,000 KB)可将恢复时间缩短至283.9秒,但稳态延迟升至17.3毫秒。默认配置(每CPU核心一段)在恢复时间和稳态延迟间取得平衡,适合大多数场景。

删除阈值与真空优化

将deleted_threshold从20%提高到50%可避免真空优化在搜索流量高峰时触发,p95延迟从22.7毫秒降至4.3毫秒。但代价是软删除点占用更多磁盘空间。建议根据实际删除模式调整阈值,而非依赖默认值。

Q&A

Qdrant优化器配置如何影响搜索延迟?

Qdrant优化器配置显著影响搜索延迟。例如,连续索引在加载后需要恢复期,但稳态延迟可降低180倍;启用prevent_unoptimized能大幅降低排空期延迟,但新点暂不可见。单段配置稳态最快但恢复慢,限制段大小则相反。串行化优化线程可平滑延迟但延长排空。提高删除阈值可避免真空干扰。

Qdrant中连续索引和禁用索引在搜索延迟上有什么区别?

连续索引在加载后需要恢复期,期间搜索延迟较高(中位数780ms,p95 2.0s),但稳态延迟极低(中位数4.3ms,p95 7.6ms)。禁用索引则跳过恢复期,但稳态搜索因暴力扫描而延迟较高(中位数256.6ms),比连续索引稳态高约60倍。

Qdrant的prevent_unoptimized标志有什么作用?

prevent_unoptimized是Qdrant 1.17.1引入的实验性标志,在写入路径上工作:当段数据超过索引阈值时,新写入的点变为延迟点,持久存储但暂不可搜索,直到段优化完成。这能显著降低排空期延迟(p50从780ms降至10.2ms),但新点可能暂时不可见,查询结果可能不完整。

Qdrant中单段配置和限制段大小在搜索延迟和恢复时间上有什么权衡?

单段配置稳态搜索最快(中位数3.2ms),但恢复时间最长(超过1小时)。限制段大小(如100,000 KB)恢复最快(283.9秒),但稳态延迟较高(中位数17.3ms)。默认配置(每CPU核心一段)在两者之间平衡。

如何通过优化器线程配置来平滑Qdrant的查询延迟?

将max_optimization_threads和max_indexing_threads设置为1,可以平滑查询延迟,但会延长排空时间。在基准测试中,排空时间延长至3244.1秒(默认的6.8倍),但排空期p95延迟降至373.7ms(默认的一半以下)。

Qdrant中删除阈值(deleted_threshold)如何影响搜索延迟?

提高删除阈值(如从20%提高到50%)可以避免在活跃搜索流量期间触发真空优化,从而降低p95延迟。例如,删除25%数据后,20%阈值触发真空,p95从5.0ms升至22.7ms;50%阈值不触发,p95从5.4ms降至4.3ms。

Qdrant中延迟索引(deferred indexing)有什么风险?

延迟索引(禁用索引后重新开启)会一次性重新打开整个积压,导致搜索延迟飙升。在基准测试中,未启用prevent_unoptimized时,中位数延迟达2.7秒,p95达12.1秒;启用prevent_unoptimized后,延迟快速恢复,p95为621.7ms,稳态p95仅5.7ms。

🏷️

标签

➡️

继续阅读