Garantindo que você tenha memória suficiente para criar um instantâneo do Redis OSS - Amazon ElastiCache (RedisOSS)

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Garantindo que você tenha memória suficiente para criar um instantâneo do Redis OSS

Instantâneos e sincronizações do Redis OSS na versão 2.8.22 e posterior

O Redis OSS 2.8.22 introduz um processo de salvamento sem bifurcação que permite alocar mais memória para o uso do aplicativo sem incorrer no aumento do uso de swap durante sincronizações e salvamentos. Para ter mais informações, consulte Como a sincronização e o backup são implementados.

Instantâneos e sincronizações do Redis OSS antes da versão 2.8.22

Quando você trabalha com ElastiCache (Redis OSS), o Redis OSS chama um comando de gravação em segundo plano em vários casos:

  • Ao criar um snapshot para um backup.

  • Ao sincronizar réplicas com o primário em um grupo de replicação.

  • Ao ativar o recurso de anexar somente arquivos (AOF) para o Redis OSS.

  • Ao promover uma réplica para primário (o que causa uma sincronização entre o primário/réplica).

Sempre que o Redis OSS executa um processo de gravação em segundo plano, você deve ter memória disponível suficiente para acomodar a sobrecarga do processo. A falta de memória suficiente disponível faz com que o processo falhe. Por isso, é importante escolher um tipo de instância de nó que tenha memória suficiente ao criar seu cluster Redis OSS.

Processo de gravação em segundo plano e uso de memória

Sempre que um processo de gravação em segundo plano é chamado, o Redis OSS bifurca seu processo (lembre-se de que o Redis é de thread único). Uma bifurcação persiste seus dados no disco em um arquivo de instantâneo do Redis OSS .rdb. A outra bifurcação atende a todas as operações de leitura e gravação. Para garantir que seu instantâneo seja um point-in-time instantâneo, todas as atualizações e adições de dados são gravadas em uma área da memória disponível separada da área de dados.

Enquanto você tiver memória suficiente disponível para registrar todas as operações de gravação durante a manutenção dos dados no disco, não haverá problemas de memória insuficiente. É provável que você experimente problemas de memória insuficiente se uma das seguintes condições for verdadeira:

  • Seu aplicativo realiza muitas operações de gravação, exigindo assim uma grande quantidade de memória disponível para aceitar os dados novos ou atualizados.

  • Você tem pouca memória disponível para gravar dados novos ou atualizados.

  • Você tem um grande conjunto de dados que demora muito para persistir no disco, exigindo um grande número de operações de gravação.

O diagrama a seguir ilustra o uso da memória ao executar um processo de gravação em segundo plano.

Imagem: diagrama de uso de memória durante uma gravação em segundo plano.

Para obter informações sobre o impacto de fazer um backup sobre o desempenho, consulte Impacto sobre o desempenho dos backups de clusters autoprojetados.

Para obter mais informações sobre como o Redis OSS executa instantâneos, consulte http://redis.io.

Para obter mais informações sobre regiões e zonas de disponibilidade, consulte Escolher regiões e zonas de disponibilidade.

Evitando memória insuficiente ao executar uma gravação em segundo plano

Sempre que um processo de gravação em segundo plano, como BGSAVE ou BGREWRITEAOF é chamado, para evitar que o processo falhe, você deve ter mais memória disponível do que a consumida pelas operações de gravação durante o processo. O pior cenário é que, durante a operação de gravação em segundo plano, cada registro do Redis OSS seja atualizado e alguns novos registros sejam adicionados ao cache. Por isso, recomendamos que você reserved-memory-percent defina como 50 (50 por cento) para as versões do Redis OSS anteriores à 2.8.22 ou 25 (25 por cento) para as versões 2.8.22 e posteriores do Redis OSS.

O valor maxmemory indica a memória disponível para dados e sobrecargas operacionais. Como você não pode modificar o parâmetro reserved-memory no parameter group padrão, deve criar um parameter group personalizado para o cluster. O valor padrão para reserved-memory é 0, o que permite que o Redis OSS consuma toda a memória máxima com dados, potencialmente deixando pouca memória para outros usos, como um processo de gravação em segundo plano. Para valores maxmemory por tipo de instância de nó, consulte Parâmetros específicos do tipo de nó Redis OSS.

Você também pode usar o reserved-memory parâmetro para reduzir a quantidade de memória que o Redis OSS usa na caixa.

Para obter mais informações sobre os parâmetros específicos do Redis em ElastiCache, consulte. Parâmetros específicos do Redis OSS

Para obter informações sobre como criar e modificar parameter groups, consulte Criar um parameter group e Modificar um parameter group.