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 evictionEnabled: true

Aktiviert über backgroundEvictionEnabled: true (erfordert gleichzeitig evictionEnabled: true )

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

evictionEnabled

bool

true/false

Hauptschalter für die Räumungsstrategie. Der Standardwert ist false. Aktiviert den Modus "Sync Eviction".

In Tiered Storage immer auf true eingestellt.

backgroundEvictionEnabled

bool

true/false

Führt die Verdrängung asynchron im Hintergrund aus. Erfordert evictionEnabled: true. Der Standardwert ist false.

Verwenden Sie true für eine gleichmäßigere Abfrageleistung; dies verringert die Häufigkeit der Synchronisierung.

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

memoryLowWatermarkRatio

Schwimmer

(0.0, 1.0]

Speichernutzungsgrad, bei dem die Verdrängung endet.

Beginnen Sie bei 0.75. Etwas niedriger, wenn der QueryNode-Speicher begrenzt ist.

memoryHighWatermarkRatio

float

(0.0, 1.0]

Speichernutzungsgrad, bei dem die asynchrone Verdrängung beginnt.

Beginnt bei 0.8. Halten Sie einen vernünftigen Abstand zum unteren Wasserzeichen (z. B. 0,05-0,10), um häufige Auslöser zu vermeiden.

diskLowWatermarkRatio

float

(0.0, 1.0]

Festplattennutzungsgrad, bei dem die Verdrängung endet.

Beginnen Sie bei 0.75. Niedriger einstellen, wenn die Festplatten-E/A begrenzt ist.

diskHighWatermarkRatio

float

(0.0, 1.0]

Festplattennutzungsgrad, bei dem die asynchrone Auslagerung beginnt.

Beginnt bei 0.8. Halten Sie einen vernünftigen Abstand zum unteren Wasserzeichen (z. B. 0,05-0,10), um häufige Auslösungen zu vermeiden.

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

cacheTtl

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.

Try Managed Milvus for Free

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

Get Started
Feedback

War diese Seite hilfreich?