Uma instância do Memorystore para Redis, se não for gerenciada e configurada corretamente, poderá sofrer pressão de memória que pode afetar o desempenho do aplicativo. Nesta página, descrevemos as práticas recomendadas para gerenciar com eficiência o uso de memória da instância.
Neste tópico:
Conceitos de gerenciamento de memória: conceitos importantes para ajudar você a manter íntegra a instância do Memorystore.
Operações com uso intenso de memória: operações que podem causar pressão na memória.
Monitorar o uso de memória da instância: métricas que precisam ser monitoradas para saber como a instância usa a memória.
Como resolver uma condição de falta de memória: etapas para resolver problemas relacionados a uma condição de falta de memória.
Dimensionar a instância do Memorystore: em vez de criar uma instância com provisionamento em excesso, saiba como dimensionar corretamente a instância.
Conceitos de gerenciamento de memória
Nesta seção, apresentamos conceitos necessários para gerenciar o uso de memória da instância.
Capacidade da instância
- A capacidade da instância é a quantidade de memória que você provisiona em gigabytes (GB) e o que é cobrado. Para mais detalhes sobre como selecionar a capacidade correta da instância, consulte Dimensionar a instância do Memorystore.
Configuração do Maxmemory
Maxmemory é uma configuração do Redis que permite definir o limite de memória em que a política de remoção entra em vigor. O Memorystore para Redis designa essa configuração como
maxmemory-gb
. Quando você cria uma instância,maxmemory-gb
é definido como a capacidade da instância. Dependendo da métrica de proporção de uso de memória do sistema, talvez seja necessário diminuir o limite demaxmemory-gb
para fornecer sobrecarga de memória para picos de carga de trabalho.Para mais detalhes, consulte Gerenciar a proporção de uso de memória do sistema.
Para saber como ajustar o
maxmemory-gb
, consulte Como configurar instâncias do Redis.
Proporção de uso da memória do sistema
A métrica de proporção de uso de memória do sistema permite medir o uso de memória de uma instância em relação à memória do sistema. A memória do sistema é gerenciada automaticamente pelo Memorystore para lidar com picos de uso de memória causados por operações com uso intenso de memória e fragmentação de memória, que é comum no Redis de código aberto.
Se a métrica de proporção de uso de memória do sistema exceder 80%, isso indicará que a instância está sob pressão de memória, portanto, siga as instruções em Gerenciar a proporção de uso de memória do sistema. Se você não fizer nada e o uso da memória continuar a crescer, haverá risco de falha em uma instância devido à memória insuficiente. A métrica de proporção de uso de memória do sistema pode exceder 80% devido à fragmentação da memória. Outra possibilidade é que, se a métrica atingir rapidamente 80% ou mais, isso indicará que talvez você tenha usado uma das operações com uso intenso de memória.
A proporção de uso de memória do sistema precisa ser de 50% ou menos durante as atualizações de manutenção. Além disso, às vezes, a exportação exige uma proporção de uso da memória do sistema de 50% ou menos.
Memória usada
- A métrica de memória usada mostra a quantidade de
dados na instância do Memorystore. A memória usada de uma instância pode aumentar
até o limite de configuração
maxmemory-gb
. Quando a memória usada excede o limite demaxmemory-gb
, a política de remoção entra em vigor.
Política de remoção
A política de remoção da instância (também conhecida como política maxmemory) determina como o Redis remove chaves quando os dados da instância atingem o limite
maxmemory-gb
. O Redis remove chaves como parte do caso de uso de cache normal. A remoção de chaves ocorre em segundo plano, por isso, as chaves não são removidas imediatamente após o limite demaxmemory-gb
ser atingido. Uma alta taxa de gravação pode ultrapassar a remoção de chave, resultando em uma condição de falta de memória.A política de remoção padrão de uma instância do Memorystore é
volatile-lru
. Se você estiver usando uma política de remoçãovolatile-*
, verifique se está definindo TTLs nas chaves que precisam expirar. Caso contrário, o Redis não terá chaves para remover.Para ver uma lista de políticas de remoção, consulte Políticas de maxmemory.
Para saber como alterar sua política de remoção, consulte Como configurar instâncias do Redis.
Fragmentação de memória
- A fragmentação de memória pode fazer
com que a instância do Memorystore fique sem memória mesmo quando a proporção
de memória usada para
maxmemory-gb
estiver baixa. A fragmentação de memória acontece quando o sistema operacional aloca páginas de memória que o Redis não pode utilizar totalmente após operações repetidas de gravação e exclusão. O acúmulo dessas páginas pode causar falta de memória do sistema e, por fim, falha no servidor Redis. A configuraçãoactivedefrag
do Redis pode ajudar a reduzir a fragmentação.
Desfragmentação ativa
As versões 4.0 e posteriores do Redis fornecem uma configuração
activedefrag
. Se possível, crie sua instância do Memorystore usando o Redis 4.0. O Memorystore defineactivedefrag
como "não" por padrão. Definiractivedefrag
como "sim" vem com uma troca de CPU, mas pode ajudar a atenuar a fragmentação de memória, o que contribui para problemas de falta de memória.Se a métrica de proporção de uso de memória do sistema indica a fragmentação de memória, ative
activedefrag
. Caso contrário,activedefrag
ainda será uma configuração opcional.
Operações com uso intenso de memória
As operações a seguir usam memória significativa, especialmente quando executadas em conjunto com uma alta taxa de gravação:
Operação de exportação
O recurso export do Memorystore
usa a operação BGSAVE do Redis, que usa
cópia durante a gravação. Dependendo do tamanho dos dados, do volume de
gravação e das chaves tocadas, a memória necessária para uma
exportação pode ser o dobro do espaço que seus dados ocupam. Portanto, para que as exportações sejam bem-sucedidas, talvez seja
necessário reduzir o limite de maxmemory-gb
para 50% da capacidade da instância durante as exportações.
Operações de escalonamento e upgrade de versão
O escalonamento ou o upgrade durante períodos de alta carga de gravação podem colocar pressão de memória na instância devido à sobrecarga de memória causada pela replicação. Além disso, uma alta carga de leitura pode aumentar o tamanho do buffer de saída do Redis, aumentando a pressão na memória. Se uma operação de escalonamento ou upgrade falhar devido à pressão da memória, faça o seguinte:
- Reduza o
maxmemory-gb
para 50% da capacidade da instância antes de uma operação de escalonamento/upgrade. Se possível, diminua também o maxmemory durante períodos de tráfego baixo da instância, porque isso reduz o impacto negativo ao diminuir o maxmemory na proporção de ocorrência em cache. - Escalonamento/upgrade durante períodos de pouca gravação.
Manutenção
A manutenção também aumenta a pressão de memória na instância. Tome medidas para que a métrica de Proporção de uso da memória do sistema fique em 50% ou menos no momento da manutenção programada. Para isso, programe um horário em que o tráfego da instância esteja baixo ou aumente temporariamente o tamanho da instância durante a janela de manutenção para que a métrica de Proporção de uso da memória do sistema fique em 50% ou menos.
Monitorar o uso de memória da instância
Monitore as métricas e defina os alertas descritos nesta seção. Essas métricas e alertas fornecem informações sobre o uso de memória da sua instância. Para saber como visualizar métricas e definir alertas, consulte Como monitorar instâncias do Redis.
Métricas relacionadas ao gerenciamento de memória
Métrica | Endereço da métrica completa |
---|---|
Maxmemory | redis.googleapis.com/stats/memory/maxmemory |
Uso de memória | redis.googleapis.com/stats/memory/usage |
Proporção de uso de memória | redis.googleapis.com/stats/memory/usage_ratio |
Duração de sobrecarga da memória do sistema | redis.googleapis.com/stats/memory/system_memory_overload_duration |
Proporção de uso da memória do sistema | redis.googleapis.com/stats/memory/system_memory_usage_ratio |
Proporção de ocorrência em cache | redis.googleapis.com/stats/memory/cache_hit_ratio |
Chaves a expirar | redis.googleapis.com/keyspace/keys_with_expiration |
Chaves expiradas | redis.googleapis.com/stats/expired_keys |
Chaves removidas | redis.googleapis.com/stats/evicted_keys |
Proporção de uso de memória
A métrica de proporção de uso de memória indica a proximidade
do tamanho do conjunto de trabalho em relação ao limite de maxmemory-gb
. A menos que a política de remoção
esteja definida como sem remoção, os dados da instância que atingem
maxmemory nem sempre indicam um problema. No entanto, a remoção de chaves é um processo em segundo
plano que leva tempo. Se houver uma alta taxa de gravação, a memória poderá se esgotar antes que o
Redis tenha tempo de remover as chaves para liberar espaço.
Proporção de uso da memória do sistema
A proporção de uso de memória do sistema é uma métrica essencial a ser monitorada. Para garantir que a instância tenha memória suficiente para aceitar sua carga de trabalho e outras operações com uso intensivo de memória, é importante sempre ter memória suficiente do sistema disponível.
Defina um alerta para notificá-lo se a métrica de proporção de uso de memória do sistema atingir 80%. Se atingir 80%, comece a monitorar a métrica de proporção de uso de memória do sistema mais de perto. Se a proporção de uso de memória do sistema continuar a crescer drasticamente, ative activedefrag, diminua maxmemory e avalie se escalonará a instância.
Quando a proporção de uso de memória do sistema atinge 100%, qualquer operação que aumente ainda mais a memória ocupada da instância é bloqueada e o Redis retorna o seguinte erro:
-OOM command not allowed under OOM prevention.
Consulte Gerenciar a proporção de uso de memória do sistema para mais detalhes.
Duração de sobrecarga da memória do sistema
Se o uso da memória for muito alto, o Memorystore bloqueará gravações na instância para manter sua integridade. A duração da sobrecarga de memória do sistema rastreia a duração de tempo em que a instância fica no estado de gravações bloqueadas.
Você precisa definir um alerta
para essa métrica para saber quando suas gravações estão sendo bloqueadas
para sua instância. Além disso, é possível recapitular essa métrica para solucionar o
erro -OOM command not allowed under OOM prevention.
.
Proporção de ocorrência em cache
Monitore regularmente a proporção de ocorrência em cache para saber qual
porcentagem de pesquisas de chaves é retornada com sucesso por chaves na
instância do Redis. De modo geral, uma proporção de ocorrência em cache mais
alta é melhor do que uma proporção de ocorrência em cache mais baixa. Anote a proporção de ocorrência em cache antes de fazer grandes
alterações na configuração, como ajustar o limite de maxmemory-gb
, alterar a política de remoção ou escalonar a
instância. Em seguida, depois de modificar a instância, verifique a
proporção de ocorrência em cache novamente para ver como a alteração afetou essa métrica.
Chaves a expirar e chaves expiradas
A métrica do Stackdriver chaves a expirar monitora o número de chaves definidas para
expiração. Se não houver chaves a expirar, isso poderá indicar que
você não está definindo TTLs nas chaves. Nesses casos, quando os dados da instância atingem
o limite de maxmemory-gb
, não há chaves a serem removidas, o que pode resultar em
uma condição de falta de memória se você estiver usando uma política de remoção volatile-*
.
Outra métrica que pode ser monitorada são as chaves expiradas. Se a métrica mostrar
muitas chaves expiradas, mas você ainda vir a pressão de memória na
instância, diminua maxmemory-gb
.
Como resolver uma condição de falta de memória
Veja a seguir algumas práticas recomendadas que devem ser seguidas se a instância estiver enfrentando pressão de memória ou erros de falta de memória.
Se você estiver usando uma política de remoção
volatile-*
, verifique se está definindo TTLs nas chaves que precisam expirar. Consulte Política de remoção para mais detalhes.Para instâncias que executam o Redis 4.0 e superior:
- Ative
activedefrag
para a instância. Consulte Desfragmentação ativa para mais detalhes.
- Ative
Saiba como usar métricas para resolver problemas de falta de memória e acessar informações sobre o uso de memória da instância: Monitorar o uso de memória da instância, Gerencie a proporção de uso de memória do sistema.
Saiba como ajustar maxmemory ao executar Operações com uso intenso de memória.
Se a métrica de proporção de uso de memória do sistema exceder 80%, reduza o limite de
maxmemory-gb
da instância. Consulte Gerenciar a proporção de uso de memória do sistema para mais detalhes.Avalie se escalonará a capacidade da instância .
Se você ainda encontrar condições de OOM, entre em contato com o suporte do Google Cloud Platform.
Dimensionar a instância do Memorystore corretamente
Nesta seção, fazemos três abordagens distintas que ajudam a dimensionar corretamente sua instância com base na carga de trabalho:
- Determinar o tamanho inicial de uma instância do Memorystore explica como estimar o tamanho da instância antes de criá-la.
- Monitorar o uso de memória da instância descreve métricas que fornecem informações úteis sobre como a instância está usando memória.
- Gerenciar a proporção de uso de memória do sistema explica o que fazer se a proporção de uso de memória do sistema exceder 80%.
Determinar o tamanho inicial de uma instância do Memorystore
Primeiro, escolha se quer uma instância de nível Padrão ou Básico. Para saber mais sobre os níveis do Memorystore para Redis, consulte Recursos do nível do Redis. Depois de selecionar o nível certo para o aplicativo, siga estas etapas para determinar o tamanho da instância de que você precisa:
Determine o tamanho dos dados.
- Estime o número de chaves e o tamanho médio das chaves que o aplicativo gravará na instância do Redis. Multiplique esses valores para ter uma estimativa aproximada do tamanho da instância de que você precisa.
Escolha uma política de remoção.
- Se você usar a política maxmemory de
noeviction
, o tamanho da instância precisará ser grande o suficiente para manter o conjunto de trabalho e a carga de trabalho de pico. Se você ficar sem memória com essa política maxmemory, a instância poderá inserir uma condição de falta de memória. - Outras políticas de remoção não influenciam o tamanho da instância que você precisa provisionar.
- Se você usar a política maxmemory de
Provisione memória extra para instâncias de nível Padrão
- Ao contrário das instâncias do nível Básico, as instâncias do nível Padrão reservam 10% da capacidade da instância como um buffer de replicação. Se você escolher uma instância de nível Padrão, verifique a estimativa de dados da etapa 1 e provisione 10% a mais para o buffer de replicação.
Estime sua taxa média e de pico de gravação
- Se possível, estime a taxa de gravação e o tamanho das chaves que seu aplicativo usará. A taxa de gravação em comparação com a taxa de remoção de chaves determina a velocidade de crescimento da instância ao longo do tempo.
Escalone verticalmente para atingir a proporção de ocorrência em cache pretendida
- Monitore a proporção de ocorrência em cache e, se não estiver recebendo as ocorrências em cache bem-sucedidas pretendidas, isso significará que você precisa aumentar o tamanho da instância ou verificar se o aplicativo está gravando as chaves na instância do Memorystore que estão sendo solicitadas e não cumpridas.
Determinar se a instância está bloqueando gravações devido a uma condição de falta de memória
Se for exibido o erro a seguir:
-OOM command not allowed under OOM prevention.
Verifique se:
- A métrica de proporção de uso de memória do sistema excedeu 80% pouco antes de sua instância começar a ter problemas.
- A proporção de uso de memória do sistema aumentou muito rapidamente antes de ocorrerem problemas com a instância.
- A métrica de duração da sobrecarga de memória do sistema mostrou valores acima de zero durante o mesmo período em que houve gravações bloqueadas.
Em caso afirmativo, isso provavelmente indica que a instância está bloqueando gravações devido a uma condição de falta de memória.
Gerenciar a proporção de uso de memória do sistema
Defina um alerta para notificá-lo se a métrica de proporção de uso de memória do sistema exceder 80%. Se a proporção de uso de memória do sistema exceder 80%, será necessário tomar as medidas adequadas para que a instância não fique sem memória. Dependendo do volume de gravação e do padrão de acesso da chave, o uso da memória do sistema pode aumentar para 100% rapidamente. O Memorystore fornece as seguintes maneiras de gerenciar a proporção de uso de memória do sistema:
- Ative
activedefrag
para instâncias que executam o Redis versão 4.0 e superior. - Reduzir o limite de
maxmemory-gb
da instância. - Escalonar verticalmente a instância.
- Escolher a política de remoção apropriada.
- Defina a TTL de chaves voláteis.
- Excluir manualmente as chaves da instância.
Ativar activedefrag
Se a proporção de uso de memória do sistema exceder 80%, ative activedefrag
(para
instâncias que executam o Redis versão 4.0 e superior). A desfragmentação da memória pode levar horas. Se o tráfego de gravação for alto, a desfragmentação pode não ser
suficiente para interromper a falta de memória na instância. Portanto, talvez seja
necessário implementar as recomendações a seguir:
Diminuir o limite de maxmemory da instância
Se a proporção de uso de memória do sistema exceder 80%, diminua maxmemory-gb
, mas
primeiro veja como a proporção de uso de memória do sistema mudou ao longo do
tempo para determinar qual novo limite de maxmemory-gb
será definido.
Cenário 1: a proporção de uso de memória do sistema vem aumentando
de maneira lenta e gradual. A fragmentação é um problema provável, e você precisa diminuir
maxmemory-gb
em pequenos incrementos até que a proporção de uso de memória do sistema fique estabilizada abaixo de 80%.
Cenário 2: a proporção de uso de memória do sistema aumentou rapidamente e você vê uma carga de gravação significativa na instância. Uma operação com uso intenso de memória provavelmente causou o pico. Nessa situação, diminua o limite de maxmemory-gb
em incrementos maiores para garantir que a instância evite entrar em uma condição de memória insuficiente ou se recupere de uma condição de falta de memória.
Observe que diminuir a maxmemory pode reduzir as proporção de ocorrência em cache das suas instâncias.
Uma proporção de ocorrência em cache muito menor indica que você precisa escalonar verticalmente a instância para que o aplicativo possa se beneficiar com as vantagens de usar o Redis. Para saber como ajustar a configuração do maxmemory-gb
, consulte Como configurar instâncias do Redis.
Escalonar verticalmente sua instância
Siga as instruções em Como escalonar instâncias do Redis para aumentar a capacidade da instância.
Exemplo de escalonamento do Maxmemory:
Se você tiver uma instância de 10 GB com maxmemory-gb
definido como 8 GB, terá
8 GB para armazenar chaves e 2 GB de sobrecarga de memória. Se você escalonar a instância
para 20 GB, o maxmemory-gb
será escalonado para 16 GB. Portanto, sua instância agora tem 16 GB de
memória para armazenar chaves e 4 GB de sobrecarga.
Consulte Como escalonar instâncias do
Redis para ver instruções sobre como aumentar ou diminuir o tamanho da instância.
Escolher a política de remoção apropriada
Se você estiver armazenando dados voláteis, escolha uma das políticas de remoção volatile-*
.
Se você estiver armazenando dados que não são voláteis, escolha uma das políticas allkeys-*
.
Excluir chaves da instância manualmente
É possível melhorar as condições de falta de memória excluindo chaves da instância manualmente. Essa é uma solução temporária que ajuda a melhorar a integridade da instância.