立ち退きCompatible with Milvus 2.6.4+
EvictionはMilvusの各QueryNodeのキャッシュリソースを管理します。有効にすると、リソースのしきい値に達すると自動的にキャッシュされたデータを削除し、安定したパフォーマンスを確保し、メモリやディスクの枯渇を防ぎます。
EvictionはLeast Recently Used (LRU)ポリシーを使用してキャッシュ領域を再利用します。メタデータは常にキャッシュされ、退避されることはありません。なぜなら、メタデータはクエリ計画に不可欠であり、通常は小さいからです。
退避は明示的に有効にする必要があります。設定を行わないと、キャッシュされたデータはリソースが枯渇するまで蓄積され続けます。
立ち退きタイプ
Milvusは2つの補完的な立ち退きモード(同期と 非同期)をサポートしており、最適なリソース管理のために連携します:
アスペクト |
同期立ち退き |
非同期立ち退き |
|---|---|---|
トリガー |
クエリまたは検索中にメモリまたはディスクの使用量が内部制限を超えた場合に発生します。 |
使用量が上限を超えたとき、またはキャッシュされたデータが有効期限(TTL)に達したときに、バックグラウンドのスレッドによってトリガーされる。 |
動作 |
QueryNodeがキャッシュ領域を取り戻す間、クエリまたは検索操作は一時停止します。使用率が低いウォーターマークを下回るまで、またはタイムアウトが発生するまで、退出は継続されます。タイムアウトに達し、再要求できるデータが不十分な場合、クエリまたは検索は失敗する可能性があります。 |
バックグラウンドで定期的に実行され、使用量がハイ・ウォーターマークを超えるか、TTLに基づいてデータの有効期限が切れると、キャッシュされたデータをプロアクティブに退避します。立ち退きは、使用量が低いウォーターマークを下回るまで継続されます。クエリはブロックされません。 |
最適な用途 |
使用量のピーク時に、短時間のレイテンシ・スパイクや一時的な休止を許容できるワークロード。非同期立ち退きでは十分な速さで領域を回復できない場合に有用です。 |
スムーズで予測可能なクエリ・パフォーマンスを必要とするレイテンシに敏感なワークロード。プロアクティブなリソース管理に最適。 |
注意事項 |
退避可能なデータが不十分な場合、短いクエリ遅延またはタイムアウトが発生する可能性があります。 |
高/低ウォーターマークとTTL設定を適切に調整する必要がある。バックグラウンド・スレッドによる若干のオーバーヘッド。 |
構成 |
設定方法 |
|
推奨設定:
ワークロードがTiered Storageの恩恵を受け、eviction関連のフェッチレイテンシーを許容できる場合、両方のevictionモードを同時に有効にして最適なバランスをとることができる。
パフォーマンス・テストまたはレイテンシが重要なシナリオでは、eviction後のネットワーク・フェッチのオーバーヘッドを避けるために、evictionを完全に無効にすることを検討してください。
evictableフィールドとevictableインデックスでは、eviction単位はロード粒度と一致します。スカラ/ベクトル・フィールドはチャンク単位でevictionされ、スカラ/ベクトル・インデックスはセグメント単位でevictionされます。
evictionの有効化
milvus.yaml のqueryNode.segcore.tieredStorage の下でevictionを構成する:
queryNode:
segcore:
tieredStorage:
evictionEnabled: true # Enables synchronous eviction
backgroundEvictionEnabled: true # Enables background (asynchronous) eviction
パラメータ |
タイプ |
値 |
説明 |
推奨使用例 |
|---|---|---|---|---|
|
ブール |
|
立ち退き戦略のマスター・スイッチ。デフォルトは |
階層ストレージでは常に |
|
ブール |
|
バックグラウンドで非同期に立ち退きを実行します。 |
よりスムーズなクエリ・パフォーマンスを得るには |
透かしの設定
ウォーターマークは、メモリとディスクの両方について、キャッシュ退避の開始と終了のタイミングを定義します。各リソース・タイプには2つのしきい値があります:
高いウォーターマーク:使用量がこの値を超えると立ち退きが開始されます。
低ウォーターマーク:使用量がこの値を下回るまで、立ち退きが継続されます。
この構成は、立ち退きが有効になっている場合にのみ有効になります。
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
パラメータ |
タイプ |
範囲 |
説明 |
推奨される使用例 |
|---|---|---|---|---|
|
フロート |
(0.0, 1.0] |
退去が停止するメモリ使用量レベル。 |
|
|
float |
(0.0, 1.0] |
非同期evictionが開始するメモリ使用量レベル。 |
|
|
フロート |
(0.0, 1.0] |
立ち退きを停止するディスク使用量レベル。 |
|
|
フロート |
(0.0, 1.0] |
非同期退避が開始するディスク使用量レベル。 |
|
ベストプラクティス:
QueryNodeの静的使用やクエリ時間のバーストに対して余裕を残すため、ウォーターマークの高低を~0.80以上に設定しない。
ハイウォーターマークとローウォーターマークの間に大きなギャップを作らないようにする。大きなギャップは各退去サイクルを長引かせ、待ち時間を増やす可能性がある。
キャッシュTTLの設定
キャッシュTTL(Time-to-Live)は、リソースのしきい値に達していなくても、設定された期間の後にキャッシュされたデータを自動的に削除します。これは、LRU消去と一緒に機能し、古いデータがキャッシュを無制限に占有するのを防ぎます。
キャッシュ 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
パラメータ |
タイプ |
単位 |
説明 |
推奨される使用例 |
|---|---|---|---|---|
|
整数 |
秒 |
キャッシュされたデータが期限切れになるまでの時間。期限切れのアイテムはバックグラウンドで削除されます。 |
非常に動的なデータには短い TTL (数時間) を使用し、 安定したデータセットには長い TTL (数日) を使用します。時間ベースの期限切れを無効にするには 0 を設定します。 |