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 |
Abilitato tramite |
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 |
|---|---|---|---|---|
|
bool |
|
Interruttore principale per la strategia di sfratto. L'impostazione predefinita è |
Sempre impostato su |
|
bool |
|
Esegue l'evasione asincrona in background. Richiede |
Utilizzare |
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 |
|---|---|---|---|---|
|
galleggiante |
(0.0, 1.0] |
Livello di utilizzo della memoria in cui si interrompe lo sfratto. |
Iniziare da |
|
variabile |
(0.0, 1.0] |
Livello di utilizzo della memoria in cui inizia l'evasione asincrona. |
Iniziare da |
|
galleggiante |
(0.0, 1.0] |
Livello di utilizzo del disco per il quale si interrompe lo sfratto. |
Iniziare con |
|
variabile |
(0.0, 1.0] |
Livello di utilizzo del disco in cui inizia l'evasione asincrona. |
Iniziare da |
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 |
|---|---|---|---|---|
|
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. |