预热Compatible with Milvus 2.6.4+
在 Milvus 中,"预热"是对分层存储的补充,它可减轻首次访问冷数据时出现的首次访问延迟。配置完成后,预热功能会在段可查询之前将选定类型的字段或索引预加载到缓存中,确保频繁访问的数据在加载后立即可用。
为什么要预热
分层存储中的 "懒加载"通过最初只加载元数据来提高效率。但是,这可能会导致首次查询冷数据时出现延迟,因为必须从对象存储中获取所需的块或索引。
预热可在段初始化过程中主动缓存关键数据,从而解决这一问题。
它在以下情况下尤其有用
某些标量索引经常用于过滤条件。
向量索引对搜索性能至关重要,必须立即准备就绪。
查询节点重启或新网段加载后的冷启动延迟是不可接受的。
相反,对于不经常查询的字段或索引,不建议使用预热功能。禁用 "预热 "功能可缩短数据段加载时间并节省缓存空间,非常适合大型向量字段或非关键标量字段。
配置
预热由milvus.yaml 中的queryNode.segcore.tieredStorage.warmup 控制。您可以分别为标量字段、标量索引、向量字段和向量索引配置预热。每个目标都支持两种模式:
模式 |
描述 |
典型情况 |
|---|---|---|
|
在段可查询前进行预加载。加载时间略有增加,但首次查询不会产生延迟。 |
用于必须立即可用的性能关键型数据,如搜索中使用的高频标量索引或关键向量索引。 |
|
跳过预加载。数据段可查询的速度更快,但首次查询可能会触发按需加载。 |
适用于不常访问的数据或大型数据,如原始向量字段或非关键标量字段。 |
YAML 示例
queryNode:
segcore:
tieredStorage:
warmup:
# options: sync, disable.
# Specifies the timing for warming up the Tiered Storage cache.
# - `sync`: data will be loaded into the cache before a segment is considered loaded.
# - `disable`: data will not be proactively loaded into the cache, and loaded only if needed by search/query tasks.
# Defaults to `sync`, except for vector field which defaults to `disable`.
scalarField: sync
scalarIndex: sync
vectorField: disable # cache warmup for vector field raw data is by default disabled.
vectorIndex: sync
参数 |
值 |
说明 |
推荐用例 |
|---|---|---|---|
|
|
控制是否预加载标量字段数据。 |
只有当标量字段较小并且在过滤器中被频繁访问时,才使用 |
|
|
控制是否预加载标量索引。 |
对于涉及频繁筛选条件或范围查询的标量索引,请使用 |
|
|
控制是否预加载向量字段数据。 |
一般情况下, |
|
|
控制是否预加载向量索引。 |
对于对搜索延迟至关重要的向量索引,请使用 |
最佳实践
预热只影响初始加载。如果缓存数据随后被驱逐,下一次查询将按需重新加载。
避免过度使用
sync。预加载太多字段会增加加载时间和缓存压力。保守起步--仅对频繁访问的字段和索引启用预热。
监控查询延迟和缓存指标,然后根据需要扩大预加载。
对于混合工作负载,将
sync应用于对性能敏感的 Collections,将disable应用于面向容量的 Collections。