EvictionCompatible with Milvus 2.6.4+

Функция Eviction управляет ресурсами кэша каждого узла QueryNode в Milvus. Если эта функция включена, она автоматически удаляет кэшированные данные при достижении пороговых значений ресурсов, обеспечивая стабильную производительность и предотвращая истощение памяти или диска.

При вытеснении используется политика наименьшего использования (LRU) для освобождения места в кэше. Метаданные всегда кэшируются и никогда не вытесняются, поскольку они важны для планирования запросов и обычно невелики.

Вытеснение должно быть явно включено. Без настройки кэшированные данные будут накапливаться до тех пор, пока ресурсы не будут исчерпаны.

Типы выселения

Milvus поддерживает два взаимодополняющих режима выселения(sync и async), которые работают вместе для оптимального управления ресурсами:

Аспект

Sync Eviction

Асинхронное выселение

Триггер

Возникает во время запроса или поиска, когда использование памяти или диска превышает внутренние лимиты.

Срабатывает в фоновом потоке, когда использование превышает верхний предел или когда кэшированные данные достигают своего времени жизни (TTL).

Поведение

Операции запроса или поиска временно приостанавливаются, пока QueryNode освобождает место в кэше. Вытеснение продолжается до тех пор, пока использование не опустится ниже нижнего предела или не наступит тайм-аут. Если таймаут достигнут, а данных недостаточно, запрос или поиск может завершиться неудачей.

Периодически запускается в фоновом режиме, проактивно вытесняя кэшированные данные, когда их использование превышает высокий водяной знак или когда срок действия данных истекает на основании TTL. Вытеснение продолжается до тех пор, пока использование не упадет ниже низкого уровня. Запросы не блокируются.

Лучше всего подходит для

Рабочие нагрузки, которые могут выдержать кратковременные скачки задержки или временные паузы во время пикового использования. Полезно, когда асинхронное выселение не может освободить место достаточно быстро.

Рабочие нагрузки, чувствительные к задержкам, которым требуется плавная и предсказуемая производительность запросов. Идеально подходит для проактивного управления ресурсами.

Предостережения

Может вызывать короткие задержки запросов или таймауты, если доступно недостаточно данных для выселения.

Требуется правильная настройка высоких/низких водяных знаков и параметров TTL. Небольшие накладные расходы от фонового потока.

Конфигурация

Включено через evictionEnabled: true

Включается через backgroundEvictionEnabled: true (одновременно требуется evictionEnabled: true ).

Рекомендуемая настройка:

  • Для достижения оптимального баланса можно включить оба режима выселения, если рабочая нагрузка получает преимущества от многоуровневого хранения и может выдержать задержки при получении данных, связанные с выселением.

  • Для тестирования производительности или сценариев, критичных к задержкам, рассмотрите возможность полного отключения выселения, чтобы избежать накладных расходов на получение данных по сети после выселения.

Для вытесняемых полей и индексов единица вытеснения соответствует гранулярности загрузки - скалярные/векторные поля вытесняются по чанкам, а скалярные/векторные индексы - по сегментам.

Включить вытеснение

Настройте вытеснение в разделе queryNode.segcore.tieredStorage на странице milvus.yaml:

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

float

(0.0, 1.0]

Уровень использования памяти, при котором выселение прекращается.

Начните с 0.75. Немного уменьшите, если память QueryNode ограничена.

memoryHighWatermarkRatio

float

(0.0, 1.0]

Уровень использования памяти, при котором начинается асинхронное выселение.

Начало на 0.8. Сохраняйте разумный промежуток от низкого водяного знака (например, 0,05-0,10), чтобы предотвратить частые срабатывания.

diskLowWatermarkRatio

float

(0.0, 1.0]

Уровень использования диска, при котором выселение прекращается.

Начните с 0.75. Отрегулируйте ниже, если дисковый ввод-вывод ограничен.

diskHighWatermarkRatio

float

(0.0, 1.0]

Уровень использования диска, при котором начинается асинхронное выселение.

Начинается с 0.8. Сохраняйте разумный промежуток от низкого уровня (например, 0,05-0,10), чтобы предотвратить частые срабатывания.

Лучшие практики:

  • Не устанавливайте высокие и низкие водяные знаки выше ~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

Параметр

Тип

Единица измерения

Описание

Рекомендуемый вариант использования

cacheTtl

целое число

секунды

Длительность до истечения срока действия кэшированных данных. Просроченные элементы удаляются в фоновом режиме.

Используйте короткий TTL (часы) для высокодинамичных данных; используйте длинный TTL (дни) для стабильных наборов данных. Установите 0, чтобы отключить истечение срока действия на основе времени.

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?