驅逐Compatible with Milvus 2.6.4+

Eviction 管理 Milvus 中每個 QueryNode 的快取資源。啟用後,一旦達到資源臨界值,它會自動移除快取資料,以確保穩定的效能,並防止記憶體或磁碟耗盡。

驅逐使用最近最少使用 (LRU)政策來回收快取空間。元資料永遠都會被快取而不會被驅逐,因為元資料對於查詢規劃來說是不可或缺的,而且通常都很小。

驅逐必須明確啟用。如果沒有設定,快取資料會繼續累積,直到資源耗盡為止。

遷出類型

Milvus 支援兩種互補的驅逐模式(syncasync),兩種模式共同作用,以達到最佳的資源管理:

方面

同步驅逐

同步驅逐

觸發

在查詢或搜尋期間,當記憶體或磁碟使用量超過內部限制時發生。

當使用量超過高水準或快取資料達到其生存時間 (TTL) 時,由背景線程觸發。

行為

查詢或搜尋作業在 QueryNode 回收快取記憶體空間時暫停。驅逐會繼續,直到使用量降到低水準以下或發生超時。如果達到超時且無法回收足夠的資料,查詢或搜尋可能會失敗。

定期在背景執行,當使用量超過高水準或資料根據 TTL 過期時,主動驅逐快取資料。驅逐會持續,直到使用量降到低水準以下為止。不會攔截查詢。

最適合

可容忍高峰使用期間短暫延遲或暫停的工作負載。當異步驅逐無法快速回收空間時非常有用。

對延遲敏感的工作負載,需要流暢且可預測的查詢效能。適用於主動式資源管理。

注意事項

如果可驅逐的資料不足,可能會導致短暫的查詢延遲或逾時。

需要適當調整高低水印和 TTL 設定。來自背景線程的輕微開銷。

設定

透過evictionEnabled: true

透過backgroundEvictionEnabled: true 啟用 (同時需要evictionEnabled: true )

建議設定

  • 兩種驅逐模式都可同時啟用,以達到最佳平衡,前提是您的工作負載可受惠於分層儲存,並能忍受與驅逐相關的擷取延遲。

  • 對於效能測試或延遲關鍵的情境,可考慮完全停用驅逐,以避免驅逐後的網路擷取開銷。

對於可驅逐的欄位和索引,驅逐單元與載入粒度相匹配 - 標量/向量欄位會按小塊驅逐,而標量/向量索引則會按區段驅逐。

啟用驅逐

milvus.yamlqueryNode.segcore.tieredStorage 下設定驅逐:

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

參數

類型

說明

建議用例

evictionEnabled

bool

true/false

驅逐策略的主開關。預設為false 。啟用同步驅逐模式。

在分層儲存中永遠設定為true

backgroundEvictionEnabled

bool

true/false

在背景中異步執行驅逐。需要evictionEnabled: true 。預設為false

使用true 可獲得更順暢的查詢效能;可降低同步驅逐頻率。

設定水印

水印定義記憶體和磁碟的快取驅逐開始和結束的時間。每種資源類型有兩個臨界值:

  • 高水準:當使用量超過此值時開始驅逐。

  • 低水印:驅逐持續,直到使用量低於此值為止。

只有啟用驅逐時,此設定才會生效。

範例 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

參數

類型

範圍

說明

建議用例

memoryLowWatermarkRatio

浮動

(0.0, 1.0]

停止驅逐的記憶體使用量。

0.75 開始。如果 QueryNode 記憶體有限,則略為降低。

memoryHighWatermarkRatio

浮點數

(0.0, 1.0]

非同步驅逐開始時的記憶體使用量。

0.8 開始。與低水準保持合理的差距 (例如 0.05-0.10),以避免頻繁觸發。

diskLowWatermarkRatio

浮動

(0.0, 1.0]

停止驅逐的磁碟使用量。

0.75 開始。如果磁碟 I/O 受限,可調整至較低。

diskHighWatermarkRatio

浮動

(0.0, 1.0]

啟動同步驅逐的磁碟使用量。

0.8 開始。與低水準保持合理的差距 (例如 0.05-0.10),以防止頻繁觸發。

最佳做法

  • 請勿設定高水準或低水準超過 ~0.80,以便為 QueryNode 的靜態使用和查詢時間突發留出空間。

  • 避免高、低水印之間有大的間隙;大間隙會延長每次驅逐週期,並增加延遲。

設定快取記憶體 TTL

快取存活時間 (TTL)會在設定的持續時間後自動移除快取資料,即使未達到資源臨界值。它與 LRU 驅逐一起工作,以防止陳舊資料無限期地佔用快取記憶體。

Cache TTL 需要backgroundEvictionEnabled: true ,因為它在同一個背景線程上執行。

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

參數

類型

單位

說明

建議用例

cacheTtl

整數

快取資料過期前的持續時間。過期的項目會在背景中移除。

對於高度動態的資料,請使用較短的 TTL (小時);對於穩定的資料集,請使用較長的 TTL (天)。設定 0 可停用以時間為基礎的過期。

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?