Milvus
Zilliz
Casa
  • Guida per l'utente
  • Home
  • Docs
  • Guida per l'utente

  • Ottimizzazione dello stoccaggio

  • Stoccaggio a più livelli

  • Sfratto

EvacuazioneCompatible with Milvus 2.6.4+

Eviction gestisce le risorse della cache di ogni QueryNode in Milvus. Quando è abilitata, rimuove automaticamente i dati nella cache una volta raggiunte le soglie di risorse, garantendo prestazioni stabili e prevenendo l'esaurimento della memoria o del disco.

L'eviction utilizza una politica di utilizzo minimo recente (LRU) per recuperare spazio nella cache. I metadati sono sempre memorizzati nella cache e non vengono mai evitati, poiché sono essenziali per la pianificazione delle query e tipicamente di piccole dimensioni.

L'eviction deve essere abilitata esplicitamente. Senza configurazione, i dati in cache continueranno ad accumularsi fino all'esaurimento delle risorse.

Tipi di eviction

Milvus supporta due modalità di eviction complementari(sync e async) che lavorano insieme per una gestione ottimale delle risorse:

Aspetto

Evacuazione sincrona

Evacuazione asincrona

Innesco

Si verifica durante l'interrogazione o la ricerca quando l'utilizzo della memoria o del disco supera i limiti interni.

Viene attivato da un thread in background quando l'utilizzo supera la soglia massima o quando i dati nella cache raggiungono il loro time-to-live (TTL).

Comportamento

Le operazioni di query o di ricerca si fermano temporaneamente mentre il QueryNode recupera lo spazio nella cache. Lo sfratto continua finché l'utilizzo non scende al di sotto della soglia minima o finché non si verifica un timeout. Se il timeout viene raggiunto e non è possibile recuperare dati sufficienti, la query o la ricerca possono fallire.

Esegue periodicamente in background, eliminando proattivamente i dati della cache quando l'utilizzo supera la soglia massima o quando i dati scadono in base al TTL. Lo svuotamento continua finché l'utilizzo non scende al di sotto della soglia minima. Le query non vengono bloccate.

Ideale per

Carichi di lavoro che possono tollerare brevi picchi di latenza o pause temporanee durante i picchi di utilizzo. Utile quando lo svuotamento asincrono non può recuperare spazio abbastanza velocemente.

Carichi di lavoro sensibili alla latenza che richiedono prestazioni di query uniformi e prevedibili. Ideale per la gestione proattiva delle risorse.

Attenzione

Può causare brevi ritardi o timeout delle query se non sono disponibili dati evitabili sufficienti.

Richiede filigrane alte/basse e impostazioni TTL adeguatamente regolate. Leggero overhead del thread in background.

Configurazione

Abilitato tramite evictionEnabled: true

Abilitato tramite backgroundEvictionEnabled: true (richiede evictionEnabled: true allo stesso tempo)

Configurazione consigliata:

  • Entrambe le modalità di eviction possono essere attivate insieme per ottenere un equilibrio ottimale, a condizione che il carico di lavoro tragga vantaggio dall'archiviazione a livelli e possa tollerare la latenza di recupero legata all'eviction.

  • Per i test delle prestazioni o per gli scenari critici per la latenza, si consiglia di disabilitare completamente l'eviction per evitare l'overhead del fetch di rete dopo l'eviction.

Per i campi e gli indici evitabili, l'unità di eviction corrisponde alla granularità del caricamento: i campi scalari/vettoriali sono evitati per chunk e gli indici scalari/vettoriali sono evitati per segmento.

Abilitare l'eviction

Configurare l'eviction in queryNode.segcore.tieredStorage in milvus.yaml:

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

Parametro

Tipo

Valori

Descrizione

Caso d'uso consigliato

evictionEnabled

bool

true/false

Interruttore principale per la strategia di sfratto. L'impostazione predefinita è false. Abilita la modalità di evasione della sincronizzazione.

Sempre impostato su true nell'archiviazione a livelli.

backgroundEvictionEnabled

bool

true/false

Esegue l'evasione asincrona in background. Richiede evictionEnabled: true. Per impostazione predefinita, false.

Utilizzare true per migliorare le prestazioni delle query; riduce la frequenza di evasione sincronizzata.

Configurare i watermark

Le soglie definiscono l'inizio e la fine dell'evasione della cache sia per la memoria che per il disco. Ogni tipo di risorsa ha due soglie:

  • Filigrana alta: L'evasione inizia quando l'utilizzo supera questo valore.

  • Filigrana bassa: L'evasione continua finché l'uso non scende al di sotto di questo valore.

Questa configurazione ha effetto solo quando lo sfratto è abilitato.

Esempio 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

Parametro

Tipo

Intervallo

Descrizione

Caso d'uso consigliato

memoryLowWatermarkRatio

galleggiante

(0.0, 1.0]

Livello di utilizzo della memoria in cui si interrompe lo sfratto.

Iniziare da 0.75. Abbassare leggermente se la memoria del QueryNode è limitata.

memoryHighWatermarkRatio

variabile

(0.0, 1.0]

Livello di utilizzo della memoria in cui inizia l'evasione asincrona.

Iniziare da 0.8. Mantenere uno scarto ragionevole dalla filigrana bassa (ad esempio, 0,05-0,10) per evitare che si inneschino frequentemente.

diskLowWatermarkRatio

galleggiante

(0.0, 1.0]

Livello di utilizzo del disco per il quale si interrompe lo sfratto.

Iniziare con 0.75. Regolare più in basso se l'I/O del disco è limitato.

diskHighWatermarkRatio

variabile

(0.0, 1.0]

Livello di utilizzo del disco in cui inizia l'evasione asincrona.

Iniziare da 0.8. Mantenere uno scarto ragionevole dalla filigrana bassa (ad esempio, 0,05-0,10) per evitare che si inneschino frequentemente.

Migliori pratiche:

  • Non impostare watermark alti o bassi superiori a ~0,80 per lasciare spazio all'uso statico del QueryNode e alle raffiche di query.

  • Evitare grandi spazi tra i watermark alti e bassi; grandi spazi prolungano ogni ciclo di evacuazione e possono aggiungere latenza.

Configurare il TTL della cache

Il Time-to-Live (TTL) della cache rimuove automaticamente i dati presenti nella cache dopo una determinata durata, anche se non vengono raggiunte le soglie delle risorse. Funziona insieme a LRU eviction per evitare che i dati stantii occupino indefinitamente la cache.

Cache TTL richiede backgroundEvictionEnabled: true, poiché viene eseguito sullo stesso thread in background.

Esempio di 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

Parametro

Tipo

Unità

Descrizione

Caso d'uso consigliato

cacheTtl

intero

secondi

Durata prima della scadenza dei dati nella cache. Gli elementi scaduti vengono rimossi in background.

Utilizzare un TTL breve (ore) per dati altamente dinamici; utilizzare un TTL lungo (giorni) per insiemi di dati stabili. Impostare 0 per disabilitare la scadenza basata sul tempo.

Try Managed Milvus for Free

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

Get Started
Feedback

Questa pagina è stata utile?