DesalojoCompatible with Milvus 2.6.4+
El desalojo gestiona los recursos de caché de cada QueryNode en Milvus. Cuando está activado, elimina automáticamente los datos almacenados en caché una vez que se alcanzan los umbrales de recursos, garantizando un rendimiento estable y evitando el agotamiento de la memoria o del disco.
El desalojo utiliza una política de uso menos reciente (LRU ) para recuperar espacio en la caché. Los metadatos siempre se almacenan en caché y nunca se desalojan, ya que son esenciales para la planificación de consultas y suelen ser pequeños.
El desalojo debe activarse explícitamente. Sin configuración, los datos almacenados en caché seguirán acumulándose hasta que se agoten los recursos.
Tipos de desalojo
Milvus admite dos modos de desalojo complementarios(sync y async) que funcionan conjuntamente para una gestión óptima de los recursos:
Async |
Desalojo Sync |
Desalojo asíncrono |
|---|---|---|
Disparador |
Se produce durante la consulta o búsqueda cuando el uso de memoria o disco supera los límites internos. |
Activado por un subproceso en segundo plano cuando el uso supera la marca de agua alta o cuando los datos almacenados en caché alcanzan su tiempo de vida (TTL). |
Comportamiento |
Las operaciones de consulta o búsqueda se detienen temporalmente mientras el QueryNode recupera espacio en la caché. El desalojo continúa hasta que el uso cae por debajo de la marca de agua baja o se produce un tiempo de espera. Si se alcanza el tiempo de espera y no se pueden recuperar datos suficientes, la consulta o búsqueda puede fallar. |
Se ejecuta periódicamente en segundo plano, desalojando proactivamente los datos almacenados en caché cuando el uso supera la marca de agua alta o cuando los datos caducan en función del TTL. El desalojo continúa hasta que el uso cae por debajo de la marca de agua baja. Las consultas no se bloquean. |
Lo mejor para |
Cargas de trabajo que pueden tolerar breves picos de latencia o pausas temporales durante picos de uso. Útil cuando el desalojo asíncrono no puede recuperar espacio con suficiente rapidez. |
Cargas de trabajo sensibles a la latencia que requieren un rendimiento de consulta suave y predecible. Ideal para la gestión proactiva de recursos. |
Precauciones |
Puede provocar breves retrasos en las consultas o tiempos de espera si no se dispone de suficientes datos desalojables. |
Requiere un ajuste adecuado de las marcas de agua altas/bajas y de los TTL. Ligera sobrecarga del subproceso en segundo plano. |
Configuración |
Activado a través de |
Habilitado a través de |
Configuración recomendada:
Ambos modos de desalojo pueden habilitarse juntos para un equilibrio óptimo, siempre que su carga de trabajo se beneficie del almacenamiento por niveles y pueda tolerar la latencia de obtención relacionada con el desalojo.
Para pruebas de rendimiento o escenarios de latencia crítica, considere deshabilitar el desalojo por completo para evitar la sobrecarga de búsqueda en la red después del desalojo.
Para los campos e índices desalojables, la unidad de desalojo coincide con la granularidad de carga: los campos escalares/vectoriales se desalojan por trozo y los índices escalares/vectoriales se desalojan por segmento.
Activar la evicción
Configure el desalojo en queryNode.segcore.tieredStorage en milvus.yaml:
queryNode:
segcore:
tieredStorage:
evictionEnabled: true # Enables synchronous eviction
backgroundEvictionEnabled: true # Enables background (asynchronous) eviction
Parámetro |
Tipo |
Valores |
Descripción |
Caso de uso recomendado |
|---|---|---|---|---|
|
bool |
|
Interruptor maestro para la estrategia de desalojo. Por defecto |
Siempre se establece en |
|
bool |
|
Ejecuta el desalojo de forma asíncrona en segundo plano. Requiere |
Utilice |
Configurar marcas de agua
Las marcas de agua definen cuándo comienza y termina el desalojo de la caché, tanto para la memoria como para el disco. Cada tipo de recurso tiene dos umbrales:
Marca de agua alta: El desalojo comienza cuando el uso supera este valor.
Marca de agua baja: El desalojo continúa hasta que el uso cae por debajo de este valor.
Esta configuración sólo tiene efecto cuando el desalojo está activado.
Ejemplo YAML:
queryNode:
segcore:
tieredStorage:
# Memory watermarks
memoryLowWatermarkRatio: 0.75 # Eviction stops below 75% memory usage
memoryHighWatermarkRatio: 0.8 # Eviction starts above 80% memory usage
# Disk watermarks
diskLowWatermarkRatio: 0.75 # Eviction stops below 75% disk usage
diskHighWatermarkRatio: 0.8 # Eviction starts above 80% disk usage
Parámetro |
Tipo |
Rango |
Descripción |
Caso de uso recomendado |
|---|---|---|---|---|
|
float |
(0.0, 1.0] |
Nivel de uso de memoria donde se detiene el desalojo. |
Empieza en |
|
float |
(0.0, 1.0] |
Nivel de uso de memoria donde comienza el desalojo asíncrono. |
Empieza en |
|
float |
(0.0, 1.0] |
Nivel de uso de disco donde se detiene el desalojo. |
Empieza en |
|
float |
(0.0, 1.0] |
Nivel de uso de disco donde comienza la evicción asíncrona. |
Empieza en |
Mejores prácticas:
No establezca marcas de agua altas o bajas por encima de ~0,80 para dejar espacio para el uso estático de QueryNode y las ráfagas de tiempo de consulta.
Evite grandes espacios entre las marcas de agua alta y baja; los grandes espacios prolongan cada ciclo de desalojo y pueden añadir latencia.
Configurar el TTL de la caché
El tiempo de vida de la caché (TTL) elimina automáticamente los datos almacenados en caché después de una duración determinada, incluso si no se alcanzan los umbrales de recursos. Funciona junto con el desalojo LRU para evitar que los datos obsoletos ocupen la caché indefinidamente.
Cache TTL requiere backgroundEvictionEnabled: true, ya que se ejecuta en el mismo hilo de fondo.
Ejemplo YAML:
queryNode:
segcore:
tieredStorage:
evictionEnabled: true
backgroundEvictionEnabled: true
# Set the cache expiration time to 604,800 seconds (7 days),
# and expired caches will be cleaned up by a background thread.
cacheTtl: 604800
Parámetro |
Tipo |
Unidad |
Descripción |
Caso de uso recomendado |
|---|---|---|---|---|
|
entero |
segundos |
Duración antes de que caduquen los datos almacenados en caché. Los elementos caducados se eliminan en segundo plano. |
Utilice un TTL corto (horas) para datos muy dinámicos; utilice un TTL largo (días) para conjuntos de datos estables. Establezca 0 para desactivar la caducidad basada en el tiempo. |