VerdrängungCompatible with Milvus 2.6.4+
Eviction verwaltet die Cache-Ressourcen eines jeden QueryNode in Milvus. Wenn sie aktiviert ist, entfernt sie automatisch Daten aus dem Cache, sobald die Ressourcenschwellen erreicht sind, um eine stabile Leistung zu gewährleisten und eine Erschöpfung des Speichers oder der Festplatte zu verhindern.
Die Räumung verwendet eine LRU-Richtlinie (Least Recently Used), um Cache-Speicherplatz zurückzugewinnen. Metadaten werden immer zwischengespeichert und nie entfernt, da sie für die Abfrageplanung unerlässlich und in der Regel klein sind.
Die Verdrängung muss explizit aktiviert werden. Ohne Konfiguration sammeln sich die Daten im Cache an, bis die Ressourcen erschöpft sind.
Auslagerungsarten
Milvus unterstützt zwei sich ergänzende Verdrängungsmodi(sync und async), die für eine optimale Ressourcenverwaltung zusammenarbeiten:
Aspekt |
Synchrone Verdrängung |
Asynchrone Verdrängung |
|---|---|---|
Auslösen |
Tritt während einer Abfrage oder Suche auf, wenn die Speicher- oder Festplattennutzung interne Grenzen überschreitet. |
Wird von einem Hintergrund-Thread ausgelöst, wenn die Nutzung die High Watermark überschreitet oder wenn zwischengespeicherte Daten ihre Time-to-Live (TTL) erreichen. |
Verhalten |
Abfrage- oder Suchvorgänge werden vorübergehend angehalten, während der QueryNode Cache-Speicherplatz zurückfordert. Die Räumung wird fortgesetzt, bis die Nutzung unter die niedrige Wasserstandsmarke fällt oder eine Zeitüberschreitung auftritt. Wenn die Zeitüberschreitung erreicht ist und nicht genügend Daten zurückgewonnen werden können, kann die Abfrage oder Suche fehlschlagen. |
Läuft regelmäßig im Hintergrund und verdrängt proaktiv zwischengespeicherte Daten, wenn die Nutzung die hohe Wasserstandsmarke überschreitet oder wenn die Daten aufgrund der TTL ablaufen. Die Verdrängung wird fortgesetzt, bis die Nutzung unter die niedrige Wasserstandsmarke fällt. Abfragen werden nicht blockiert. |
Am besten geeignet für |
Workloads, die kurze Latenzspitzen oder vorübergehende Pausen während der Spitzenauslastung tolerieren können. Nützlich, wenn die asynchrone Räumung den Speicherplatz nicht schnell genug zurückgewinnen kann. |
Latenzempfindliche Workloads, die eine gleichmäßige und vorhersehbare Abfrageleistung erfordern. Ideal für proaktives Ressourcenmanagement. |
Vorsichtsmaßnahmen |
Kann zu kurzen Abfrageverzögerungen oder Timeouts führen, wenn nicht genügend evozierbare Daten verfügbar sind. |
Erfordert richtig eingestellte hohe/niedrige Wasserzeichen und TTL-Einstellungen. Leichter Overhead durch den Hintergrund-Thread. |
Konfiguration |
Aktiviert über |
Aktiviert über |
Empfohlene Einstellung:
Beide Verdrängungsmodi können zusammen aktiviert werden, um ein optimales Gleichgewicht zu erreichen, vorausgesetzt, Ihre Arbeitslast profitiert von Tiered Storage und kann verdrängungsbedingte Abruflatenz tolerieren.
Für Leistungstests oder latenzkritische Szenarien sollten Sie die Verdrängung vollständig deaktivieren, um den Netzwerkabruf-Overhead nach der Verdrängung zu vermeiden.
Bei verdrängbaren Feldern und Indizes entspricht die Verdrängungseinheit der Ladegranularität: Skalar-/Vektorfelder werden pro Chunk verdrängt, Skalar-/Vektorindizes werden pro Segment verdrängt.
Aktivieren der Verdrängung
Konfigurieren Sie die Verdrängung unter queryNode.segcore.tieredStorage in milvus.yaml:
queryNode:
segcore:
tieredStorage:
evictionEnabled: true # Enables synchronous eviction
backgroundEvictionEnabled: true # Enables background (asynchronous) eviction
Parameter |
Typ |
Werte |
Beschreibung |
Empfohlener Anwendungsfall |
|---|---|---|---|---|
|
bool |
|
Hauptschalter für die Räumungsstrategie. Der Standardwert ist |
In Tiered Storage immer auf |
|
bool |
|
Führt die Verdrängung asynchron im Hintergrund aus. Erfordert |
Verwenden Sie |
Konfigurieren Sie Wasserzeichen
Wasserzeichen legen fest, wann die Cache-Evakuierung sowohl für den Arbeitsspeicher als auch für die Festplatte beginnt und endet. Jeder Ressourcentyp hat zwei Schwellenwerte:
Hohe Wassermarke: Die Räumung beginnt, wenn die Nutzung diesen Wert überschreitet.
Niedrige Wassermarke: Die Verdrängung wird fortgesetzt, bis die Nutzung unter diesen Wert fällt.
Diese Konfiguration wird nur wirksam, wenn die Räumung aktiviert ist.
Beispiel 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
Parameter |
Typ |
Bereich |
Beschreibung |
Empfohlener Anwendungsfall |
|---|---|---|---|---|
|
Schwimmer |
(0.0, 1.0] |
Speichernutzungsgrad, bei dem die Verdrängung endet. |
Beginnen Sie bei |
|
float |
(0.0, 1.0] |
Speichernutzungsgrad, bei dem die asynchrone Verdrängung beginnt. |
Beginnt bei |
|
float |
(0.0, 1.0] |
Festplattennutzungsgrad, bei dem die Verdrängung endet. |
Beginnen Sie bei |
|
float |
(0.0, 1.0] |
Festplattennutzungsgrad, bei dem die asynchrone Auslagerung beginnt. |
Beginnt bei |
Bewährte Praktiken:
Setzen Sie keine hohen oder niedrigen Wasserzeichen über ~0,80, um Spielraum für die statische Nutzung von QueryNode und Abfragezeit-Bursts zu lassen.
Vermeiden Sie große Lücken zwischen hohen und niedrigen Wasserzeichen; große Lücken verlängern jeden Auslagerungszyklus und können die Latenzzeit erhöhen.
Konfigurieren Sie die Cache-TTL
Die Cache-Time-to-Live (TTL) entfernt zwischengespeicherte Daten automatisch nach einer bestimmten Zeit, auch wenn die Ressourcenschwellenwerte nicht erreicht werden. Sie arbeitet mit der LRU-Evakuierung zusammen, um zu verhindern, dass veraltete Daten den Cache auf unbestimmte Zeit belegen.
Cache TTL erfordert backgroundEvictionEnabled: true, da es auf demselben Hintergrund-Thread läuft.
Beispiel 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
Parameter |
Typ |
Einheit |
Beschreibung |
Empfohlener Anwendungsfall |
|---|---|---|---|---|
|
Ganzzahl |
Sekunden |
Dauer, bevor zwischengespeicherte Daten ablaufen. Abgelaufene Elemente werden im Hintergrund entfernt. |
Verwenden Sie eine kurze TTL (Stunden) für sehr dynamische Daten; verwenden Sie eine lange TTL (Tage) für stabile Datensätze. Setzen Sie 0, um das zeitbasierte Ablaufen zu deaktivieren. |