EvictionCompatible with Milvus 2.6.4+

L'éviction gère les ressources de cache de chaque nœud de requête dans Milvus. Lorsqu'elle est activée, elle supprime automatiquement les données mises en cache lorsque les seuils de ressources sont atteints, ce qui garantit des performances stables et empêche l'épuisement de la mémoire ou du disque.

L'éviction utilise une politique de moindre utilisation (LRU ) pour récupérer l'espace du cache. Les métadonnées sont toujours mises en cache et ne sont jamais évacuées, car elles sont essentielles pour la planification des requêtes et sont généralement de petite taille.

L'éviction doit être explicitement activée. Sans configuration, les données mises en cache continueront à s'accumuler jusqu'à ce que les ressources soient épuisées.

Types d'éviction

Milvus prend en charge deux modes d'éviction complémentaires(synchrone et asynchrone) qui fonctionnent ensemble pour une gestion optimale des ressources :

Aspect

Éviction synchrone

Éviction asynchrone

Déclenchement

Se produit pendant une requête ou une recherche lorsque l'utilisation de la mémoire ou du disque dépasse les limites internes.

Déclenchée par un thread d'arrière-plan lorsque l'utilisation dépasse le filigrane élevé ou lorsque les données mises en cache atteignent leur durée de vie (TTL).

Comportement

Les opérations d'interrogation ou de recherche s'interrompent temporairement pendant que le QueryNode récupère l'espace du cache. L'éviction se poursuit jusqu'à ce que l'utilisation passe en dessous du filigrane bas ou qu'un dépassement de délai se produise. Si le délai d'attente est atteint et que les données récupérées sont insuffisantes, la requête ou la recherche peut échouer.

S'exécute périodiquement en arrière-plan, expulsant de manière proactive les données mises en cache lorsque l'utilisation dépasse le filigrane haut ou lorsque les données expirent en fonction du TTL. L'expulsion se poursuit jusqu'à ce que l'utilisation passe sous le seuil inférieur. Les requêtes ne sont pas bloquées.

Idéal pour

Les charges de travail qui peuvent tolérer de brefs pics de latence ou des pauses temporaires pendant les pics d'utilisation. Utile lorsque l'éviction asynchrone ne permet pas de récupérer l'espace assez rapidement.

Charges de travail sensibles à la latence qui nécessitent des performances de requête fluides et prévisibles. Idéal pour une gestion proactive des ressources.

Avertissement

Peut entraîner de courts délais d'exécution des requêtes ou des dépassements de délai si le nombre de données à évincer est insuffisant.

Nécessite des filigranes haut/bas et des paramètres TTL correctement réglés. Légère surcharge due au fil d'exécution en arrière-plan.

Configuration

Activé via evictionEnabled: true

Activé via backgroundEvictionEnabled: true (nécessite evictionEnabled: true en même temps)

Configuration recommandée:

  • Les deux modes d'éviction peuvent être activés ensemble pour un équilibre optimal, à condition que votre charge de travail bénéficie du stockage hiérarchisé et puisse tolérer la latence de récupération liée à l'éviction.

  • Pour les tests de performance ou les scénarios critiques en termes de latence, envisagez de désactiver complètement l'éviction afin d'éviter la surcharge de recherche sur le réseau après l'éviction.

Pour les champs et les index évitables, l'unité d'éviction correspond à la granularité de chargement : les champs scalaires/vectoriels sont évincés par bloc et les index scalaires/vectoriels sont évincés par segment.

Activer l'éviction

Configurez l'éviction sous queryNode.segcore.tieredStorage à l'adresse milvus.yaml:

queryNode:
  segcore:
    tieredStorage:
      evictionEnabled: true             # Enables synchronous eviction
      backgroundEvictionEnabled: true   # Enables background (asynchronous) eviction

Paramètre

Type de paramètre

Valeurs

Description du cas d'utilisation

Cas d'utilisation recommandé

evictionEnabled

bool

true/false

Interrupteur principal pour la stratégie d'éviction. La valeur par défaut est false. Active le mode d'éviction par synchronisation.

Toujours défini sur true dans le stockage par paliers.

backgroundEvictionEnabled

bool

true/false

Exécute l'éviction de manière asynchrone en arrière-plan. Nécessite evictionEnabled: true. La valeur par défaut est false.

Utilisez true pour une meilleure performance des requêtes ; cela réduit la fréquence d'éviction synchrone.

Configuration des filigranes

Les points de repère définissent le moment où l'éviction du cache commence et se termine pour la mémoire et le disque. Chaque type de ressource dispose de deux seuils :

  • Filigrane élevé: L'éviction commence lorsque l'utilisation dépasse cette valeur.

  • Filigrane bas: L'éviction se poursuit jusqu'à ce que l'utilisation tombe en dessous de cette valeur.

Cette configuration ne prend effet que lorsque l'éviction est activée.

Exemple 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

Paramètre

Type de paramètre

Plage

Description de la configuration

Cas d'utilisation recommandé

memoryLowWatermarkRatio

float (flotteur)

(0.0, 1.0]

Niveau d'utilisation de la mémoire où l'éviction s'arrête.

Commencer à 0.75. Diminuer légèrement si la mémoire du QueryNode est limitée.

memoryHighWatermarkRatio

float

(0.0, 1.0]

Niveau d'utilisation de la mémoire où l'éviction asynchrone commence.

Commence à 0.8. Maintenir un écart raisonnable par rapport au filigrane bas (par exemple, 0,05-0,10) afin d'éviter des déclenchements fréquents.

diskLowWatermarkRatio

flottant

(0.0, 1.0]

Niveau d'utilisation du disque où l'expulsion s'arrête.

Commencez à 0.75. Ajuster à la baisse si les E/S disque sont limitées.

diskHighWatermarkRatio

float

(0.0, 1.0]

Niveau d'utilisation du disque où l'éviction asynchrone commence.

Commence à 0.8. Maintenez un écart raisonnable par rapport au filigrane inférieur (par exemple, 0,05-0,10) afin d'éviter des déclenchements fréquents.

Meilleures pratiques:

  • Ne pas fixer les filigranes haut et bas au-dessus de ~0,80 pour laisser une marge de manœuvre pour l'utilisation statique du QueryNode et les rafales de requêtes.

  • Évitez les grands écarts entre les filigranes haut et bas ; les grands écarts prolongent chaque cycle d'éviction et peuvent ajouter de la latence.

Configurer le TTL du cache

La durée de vie du cache (TTL) supprime automatiquement les données mises en cache après une durée déterminée, même si les seuils de ressources ne sont pas atteints. Il fonctionne en parallèle avec l'éviction LRU pour empêcher les données périmées d'occuper le cache indéfiniment.

Cache TTL nécessite backgroundEvictionEnabled: true, car il s'exécute sur le même thread d'arrière-plan.

Exemple 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

Paramètre

Type de paramètre

Unité

Description de l'unité

Cas d'utilisation recommandé

cacheTtl

entier

secondes

Durée avant l'expiration des données mises en cache. Les éléments expirés sont supprimés en arrière-plan.

Utilisez un TTL court (heures) pour les données très dynamiques ; utilisez un TTL long (jours) pour les ensembles de données stables. Définissez 0 pour désactiver l'expiration basée sur le temps.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Cette page a-t - elle été utile ?