Milvus
Zilliz
Home
  • Guia do utilizador
  • Home
  • Docs
  • Guia do utilizador

  • Otimização do armazenamento

  • Armazenamento em camadas

  • Despejo

EvicçãoCompatible with Milvus 2.6.4+

O Eviction gerencia os recursos de cache de cada QueryNode no Milvus. Quando ativado, ele remove automaticamente os dados em cache quando os limites de recursos são atingidos, garantindo um desempenho estável e evitando o esgotamento da memória ou do disco.

A evicção usa uma política LRU (Least Recently Used) para recuperar espaço em cache. Os metadados são sempre colocados em cache e nunca são despejados, uma vez que são essenciais para o planeamento de consultas e, normalmente, são pequenos.

O despejo deve ser ativado explicitamente. Sem configuração, os dados em cache continuarão a acumular-se até que os recursos se esgotem.

Tipos de despejo

Milvus suporta dois modos complementares de despejo(sync e async) que trabalham em conjunto para uma gestão óptima dos recursos:

Aspeto

Evicção sincronizada

Evicção assíncrona

Gatilho

Ocorre durante a consulta ou pesquisa quando a utilização da memória ou do disco excede os limites internos.

Acionado por um thread em segundo plano quando o uso excede a marca d'água alta ou quando os dados em cache atingem seu tempo de vida (TTL).

Comportamento

As operações de consulta ou pesquisa são temporariamente interrompidas enquanto o QueryNode recupera espaço em cache. O despejo continua até que a utilização desça abaixo da marca de água baixa ou ocorra um timeout. Se o tempo limite for atingido e não for possível recuperar dados suficientes, a consulta ou pesquisa pode falhar.

É executado periodicamente em segundo plano, despejando proactivamente os dados em cache quando a utilização excede a marca de água alta ou quando os dados expiram com base no TTL. O despejo continua até que o uso caia abaixo da marca d'água baixa. As consultas não são bloqueadas.

Ideal para

Cargas de trabalho que podem tolerar breves picos de latência ou pausas temporárias durante o pico de uso. Útil quando o despejo assíncrono não consegue recuperar espaço com rapidez suficiente.

Cargas de trabalho sensíveis à latência que exigem um desempenho de consulta suave e previsível. Ideal para gerenciamento proativo de recursos.

Precauções

Pode causar pequenos atrasos ou tempos limite de consulta se não houver dados eviccionáveis suficientes disponíveis.

Requer marcas d'água altas/baixas e configurações TTL adequadamente ajustadas. Ligeira sobrecarga do thread em segundo plano.

Configuração

Ativado através de evictionEnabled: true

Ativado através de backgroundEvictionEnabled: true (requer evictionEnabled: true ao mesmo tempo)

Configuração recomendada:

  • Ambos os modos de despejo podem ser ativados juntos para um equilíbrio ideal, desde que a carga de trabalho se beneficie do Armazenamento em camadas e possa tolerar a latência de busca relacionada ao despejo.

  • Para testes de desempenho ou cenários críticos de latência, considere desabilitar o despejo completamente para evitar a sobrecarga de busca de rede após o despejo.

Para campos e índices eviccionáveis, a unidade de evicção corresponde à granularidade de carregamento - os campos escalares/vectoriais são evacuados por pedaço e os índices escalares/vectoriais são evacuados por segmento.

Ativar a evicção

Configure a expulsão em queryNode.segcore.tieredStorage em milvus.yaml:

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

Parâmetro

Tipo de parâmetro

Valores

Descrição

Caso de utilização recomendado

evictionEnabled

bool

true/false

Interruptor principal para a estratégia de despejo. Predefinição para false. Ativa o modo de evicção de sincronização.

Sempre definido como true no armazenamento em camadas.

backgroundEvictionEnabled

bool

true/false

Executa o despejo de forma assíncrona em segundo plano. Requer evictionEnabled: true. O padrão é false.

Use true para obter um desempenho de consulta mais suave; reduz a frequência de despejo de sincronização.

Configurar marcas d'água

As marcas d'água definem quando o despejo do cache começa e termina para a memória e o disco. Cada tipo de recurso tem dois limites:

  • Marca d'água alta: O despejo começa quando o uso excede esse valor.

  • Marca de água baixa: O despejo continua até que o uso caia abaixo desse valor.

Esta configuração só tem efeito quando o despejo está ativado.

Exemplo de 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

Parâmetro

Tipo de parâmetro

Intervalo

Descrição

Caso de utilização recomendado

memoryLowWatermarkRatio

flutuante

(0.0, 1.0]

Nível de utilização de memória em que o despejo pára.

Começar em 0.75. Reduzir ligeiramente se a memória do QueryNode for limitada.

memoryHighWatermarkRatio

flutuante

(0.0, 1.0]

Nível de utilização de memória em que o despejo assíncrono começa.

Comece em 0.8. Mantenha um intervalo razoável da marca de água baixa (por exemplo, 0,05-0,10) para evitar accionamentos frequentes.

diskLowWatermarkRatio

flutuante

(0.0, 1.0]

Nível de utilização do disco em que o despejo pára.

Começa em 0.75. Ajustar para baixo se a E/S do disco for limitada.

diskHighWatermarkRatio

flutuante

(0.0, 1.0]

Nível de utilização do disco em que o despejo assíncrono começa.

Começa em 0.8. Mantenha um intervalo razoável da marca de água baixa (por exemplo, 0,05-0,10) para evitar accionamentos frequentes.

Melhores práticas:

  • Não defina marcas d'água altas ou baixas acima de ~0,80 para deixar espaço para o uso estático do QueryNode e explosões de tempo de consulta.

  • Evite grandes intervalos entre as marcas d'água alta e baixa; grandes intervalos prolongam cada ciclo de despejo e podem adicionar latência.

Configurar o TTL da cache

O TTL (Cache Time-to-Live) remove automaticamente os dados em cache após uma duração definida, mesmo que os limites de recursos não sejam atingidos. Ele funciona junto com o despejo LRU para evitar que dados obsoletos ocupem o cache indefinidamente.

O TTL do cache requer backgroundEvictionEnabled: true, pois é executado no mesmo thread em segundo plano.

Exemplo de 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

Parâmetro

Tipo de parâmetro

Unidade

Descrição

Caso de utilização recomendado

cacheTtl

inteiro

segundos

Duração antes de os dados em cache expirarem. Os itens expirados são removidos em segundo plano.

Utilize um TTL curto (horas) para dados altamente dinâmicos; utilize um TTL longo (dias) para conjuntos de dados estáveis. Defina 0 para desativar a expiração baseada no tempo.

Try Managed Milvus for Free

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

Get Started
Feedback

Esta página foi útil?