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 |
Ativado através de |
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 |
|---|---|---|---|---|
|
bool |
|
Interruptor principal para a estratégia de despejo. Predefinição para |
Sempre definido como |
|
bool |
|
Executa o despejo de forma assíncrona em segundo plano. Requer |
Use |
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 |
|---|---|---|---|---|
|
flutuante |
(0.0, 1.0] |
Nível de utilização de memória em que o despejo pára. |
Começar em |
|
flutuante |
(0.0, 1.0] |
Nível de utilização de memória em que o despejo assíncrono começa. |
Comece em |
|
flutuante |
(0.0, 1.0] |
Nível de utilização do disco em que o despejo pára. |
Começa em |
|
flutuante |
(0.0, 1.0] |
Nível de utilização do disco em que o despejo assíncrono começa. |
Começa em |
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 |
|---|---|---|---|---|
|
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. |