Ir para o conteúdo

Por que há um desequilíbrio de memória entre os fragmentos em meu cluster autogerenciado do ElastiCache para Valkey ou do ElastiCache para Redis OSS?

6 minuto de leitura
0

Meu cluster autogerenciado Amazon ElastiCache para Valkey ou Amazon ElastiCache para Redis com o modo de cluster habilitado tem uso desigual de memória entre fragmentos.

Breve descrição

Por padrão, os clusters Valkey e Redis OSS com o modo cluster ativado tentam distribuir uniformemente o espaço da chave de cache entre os fragmentos em um cluster. Para obter mais informações, consulte Como trabalhar com o modo cluster no Amazon ElastiCache para Redis.

Os motivos a seguir podem causar um uso desequilibrado da memória, o que faz com que alguns fragmentos armazenem mais dados do que outros:

  • Distribuição desigual de chaves
  • Chaves muito grandes
  • Chaves ou fragmentos “quentes”
  • Uso desigual de hash tags
  • Aumento dos buffers de saída do cliente

Resolução

Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Distribuição desigual de chaves

Se você não distribuir uniformemente os slots de hash entre os fragmentos, alguns fragmentos podem lidar com mais chaves do que outros. Para resolver esse problema, rebalanceie os slots em todo o cluster.

Observação: A opção de rebalanceamento de slots tenta distribuir uniformemente os 16.384 slots de hash entre os fragmentos disponíveis. Essa opção não é rebalanceada com base no uso da memória ou no volume de dados em cada fragmento.

Algumas chaves são muito grandes

Se algumas chaves forem muito maiores do que outras, os fragmentos que hospedam essas chaves poderão ter maior uso de memória. Para resolver esse problema, é possível dividir chaves grandes em pares menores de valores-chave. Ou remova chaves grandes desnecessárias para liberar espaço.

Para escanear o conjunto de dados em busca de chaves grandes, use o comando valkey-cli --bigkeys ou valkey-cli --memkeys. Para obter mais informações, consulte Digitalizando chaves grandes no site da Valkey.

É uma prática recomendada usar estratégias eficientes de nomenclatura de chaves, estruturas de dados e técnicas de compressão para otimizar o uso da memória das chaves.

Chaves ou fragmentos quentes

Quando você acessa algumas chaves com mais frequência do que outras, a carga se distribui de forma desigual e sobrecarrega a utilização da memória do host que está servindo. As chaves acessadas com frequência são conhecidas como chaves quentes fragmentos quentes.

Para encontrar chaves quentes, execute o comando valkey-cli --hotkeys para revisar os padrões de acesso às chaves e identificá-las. Em alguns casos, uma única chave de cache quente pode criar um ponto de concentração que sobrecarrega o nó de cache. O ponto de acesso pode afetar a CPU, a memória e os recursos de rede do nó.

Observação: o comando hotkeys funciona somente quando a maxmemory-policy está definida como *lfu.

Para resolver esse problema, execute as seguintes ações:

  • Escalar verticalmente seu cluster e forneça mais recursos.
  • Distribua o tráfego de leitura para réplicas de leitura. Para obter mais informações, consulte READONLY no site da Valkey.
  • Modifique a aplicação do cliente para reduzir o volume de gravações nas chaves.

Uso desigual de hash tags

Em um ambiente habilitado para o modo de cluster, você deve usar hash tags para implementar operações com várias chaves em um cluster Valkey. Quando você aumenta o uso de hash tags, alguns hash slots armazenam mais chaves do que outros e você obtém um desequilíbrio de memória entre os fragmentos.

Para resolver esse problema, revise o Espaço da chave e o uso da hash tag e distribua os dados em mais hash slots. Para obter mais informações, consulte a seção Hash tags na especificação Cluster no site da Valkey.

Aumento dos buffers de saída do cliente

Quando os comandos de um cliente produzem uma saída mais rápida do que a Valkey pode enviar ao cliente, o buffer de saída do cliente aumenta e usa mais memória. Para obter mais informações, consulte Limites de buffer de saída no site da Valkey.

Para identificar a causa dos problemas de buffer, conecte-se ao nó afetado e execute o comando CLIENT LIST para identificar clientes que usam espaço no buffer. Para obter mais informações, consulte CLIENT LIST no site da Valkey.

Para determinar a causa do alto buffer de saída do cliente, revise os seguintes parâmetros principais na saída:

  • obl: Comprimento do buffer de saída
  • omem: Uso da memória do buffer de saída
  • tot-mem: Memória total usada pelo cliente

Também é possível revisar as métricas DatabaseMemoryUsageCountedForEvictPercentage e DatabaseMemoryUsagePercentage no Amazon CloudWatch. Se houver uma diferença significativa no uso da memória entre as duas métricas, a causa do uso da memória são os buffers de saída do cliente.

Observação: A métrica DatabaseMemoryUsagePercentage também inclui a sobrecarga de conexão e o uso da memória do buffer de saída do cliente.

Práticas recomendadas

Para reduzir os problemas de desequilíbrio de memória, use as práticas recomendadas a seguir.

Definir configurações de TTL

Defina os valores de Time to Live (TTL) apropriados para as chaves. Quando você configura os valores de TTL apropriados, o nó Valkey remove automaticamente as chaves que ficam sem TTL e otimiza o uso da memória. Para obter mais informações, consulte TTL no site da Valkey.

Revise suas métricas de memória

É uma prática recomendada revisar regularmente as seguintes métricas principais de memória em seus fragmentos para identificar desequilíbrios precocemente e tomar medidas proativas:

  • DatabaseMemoryUsagePercentage: Acompanhe a utilização geral da memória no nó.
  • DatabaseMemoryUsageCountedForEvictPercentage: Para detectar alto uso de buffer e sobrecarga, compare com DatabaseMemoryUsagePercentage.
  • BytesUsedForCache: Monitore a memória real que os dados em cache usam.
  • CurrItems: Acompanhe o número de itens armazenados em cada fragmento.
  • SwapUsage: Acompanhe a quantidade de swap usada em um host.
    Observação: é comum que o ElastiCache tenha algum SwapUsage. O uso normal não causa problemas de latência. Se o SwapUsage ultrapassar 300 MB, verifique a pressão da memória. Para obter mais informações, consulte Quanta memória reservada você precisa?

Atualize seus nós

Para lidar com chaves grandes e padrões de acesso frequentes, aumente a escala verticalmente do seu cluster ElastiCache para fornecer recursos adicionais de CPU e memória.

Informações relacionadas

Como posso verificar o uso de memória em meu cluster autodesenvolvido do ElastiCache para Redis e implementar práticas recomendadas para controlar o alto uso de memória?

Modelo de distribuição de chaves no site da Valkey

Atualização do Amazon ElastiCache: redimensionamento on-line para clusters Redis

Como resolvo o aumento na atividade de swap em minhas instâncias do ElastiCache?

AWS OFICIALAtualizada há 7 meses