EvictionCompatible with Milvus 2.6.4+
Функция Eviction управляет ресурсами кэша каждого узла QueryNode в Milvus. Если эта функция включена, она автоматически удаляет кэшированные данные при достижении пороговых значений ресурсов, обеспечивая стабильную производительность и предотвращая истощение памяти или диска.
При вытеснении используется политика наименьшего использования (LRU) для освобождения места в кэше. Метаданные всегда кэшируются и никогда не вытесняются, поскольку они важны для планирования запросов и обычно невелики.
Вытеснение должно быть явно включено. Без настройки кэшированные данные будут накапливаться до тех пор, пока ресурсы не будут исчерпаны.
Типы выселения
Milvus поддерживает два взаимодополняющих режима выселения(sync и async), которые работают вместе для оптимального управления ресурсами:
Аспект |
Sync Eviction |
Асинхронное выселение |
|---|---|---|
Триггер |
Возникает во время запроса или поиска, когда использование памяти или диска превышает внутренние лимиты. |
Срабатывает в фоновом потоке, когда использование превышает верхний предел или когда кэшированные данные достигают своего времени жизни (TTL). |
Поведение |
Операции запроса или поиска временно приостанавливаются, пока QueryNode освобождает место в кэше. Вытеснение продолжается до тех пор, пока использование не опустится ниже нижнего предела или не наступит тайм-аут. Если таймаут достигнут, а данных недостаточно, запрос или поиск может завершиться неудачей. |
Периодически запускается в фоновом режиме, проактивно вытесняя кэшированные данные, когда их использование превышает высокий водяной знак или когда срок действия данных истекает на основании TTL. Вытеснение продолжается до тех пор, пока использование не упадет ниже низкого уровня. Запросы не блокируются. |
Лучше всего подходит для |
Рабочие нагрузки, которые могут выдержать кратковременные скачки задержки или временные паузы во время пикового использования. Полезно, когда асинхронное выселение не может освободить место достаточно быстро. |
Рабочие нагрузки, чувствительные к задержкам, которым требуется плавная и предсказуемая производительность запросов. Идеально подходит для проактивного управления ресурсами. |
Предостережения |
Может вызывать короткие задержки запросов или таймауты, если доступно недостаточно данных для выселения. |
Требуется правильная настройка высоких/низких водяных знаков и параметров TTL. Небольшие накладные расходы от фонового потока. |
Конфигурация |
Включено через |
Включается через |
Рекомендуемая настройка:
Для достижения оптимального баланса можно включить оба режима выселения, если рабочая нагрузка получает преимущества от многоуровневого хранения и может выдержать задержки при получении данных, связанные с выселением.
Для тестирования производительности или сценариев, критичных к задержкам, рассмотрите возможность полного отключения выселения, чтобы избежать накладных расходов на получение данных по сети после выселения.
Для вытесняемых полей и индексов единица вытеснения соответствует гранулярности загрузки - скалярные/векторные поля вытесняются по чанкам, а скалярные/векторные индексы - по сегментам.
Включить вытеснение
Настройте вытеснение в разделе queryNode.segcore.tieredStorage на странице milvus.yaml:
queryNode:
segcore:
tieredStorage:
evictionEnabled: true # Enables synchronous eviction
backgroundEvictionEnabled: true # Enables background (asynchronous) eviction
Параметр |
Тип |
Значения |
Описание |
Рекомендуемый вариант использования |
|---|---|---|---|---|
|
bool |
|
Главный переключатель для стратегии выселения. По умолчанию |
В многоуровневом хранилище всегда устанавливается значение |
|
bool |
|
Запускать выселение асинхронно в фоновом режиме. Требуется |
Используйте |
Настройка водяных знаков
Водяные знаки определяют, когда начинается и заканчивается вытеснение кэша для памяти и диска. Для каждого типа ресурсов есть два пороговых значения:
Высокий водяной знак: Выселение начинается, когда использование превышает это значение.
Низкий водяной знак: Вытеснение продолжается до тех пор, пока использование не упадет ниже этого значения.
Эта конфигурация вступает в силу, только если выселение включено.
Пример 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
Параметр |
Тип |
Диапазон |
Описание |
Рекомендуемый вариант использования |
|---|---|---|---|---|
|
float |
(0.0, 1.0] |
Уровень использования памяти, при котором выселение прекращается. |
Начните с |
|
float |
(0.0, 1.0] |
Уровень использования памяти, при котором начинается асинхронное выселение. |
Начало на |
|
float |
(0.0, 1.0] |
Уровень использования диска, при котором выселение прекращается. |
Начните с |
|
float |
(0.0, 1.0] |
Уровень использования диска, при котором начинается асинхронное выселение. |
Начинается с |
Лучшие практики:
Не устанавливайте высокие и низкие водяные знаки выше ~0.80, чтобы оставить запас для статического использования QueryNode и всплесков времени выполнения запросов.
Избегайте больших промежутков между высокими и низкими водяными знаками; большие промежутки удлиняют каждый цикл выселения и могут увеличить задержку.
Настройка TTL кэша
ФункцияTime-to-Live (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
Параметр |
Тип |
Единица измерения |
Описание |
Рекомендуемый вариант использования |
|---|---|---|---|---|
|
целое число |
секунды |
Длительность до истечения срока действия кэшированных данных. Просроченные элементы удаляются в фоновом режиме. |
Используйте короткий TTL (часы) для высокодинамичных данных; используйте длинный TTL (дни) для стабильных наборов данных. Установите 0, чтобы отключить истечение срока действия на основе времени. |