Se não for gerida e configurada corretamente, uma instância do Memorystore for Redis pode sofrer pressão de memória, o que pode afetar o desempenho da aplicação. Esta página descreve as práticas recomendadas que pode usar para gerir de forma eficiente a utilização de memória da sua instância.
Neste tópico:
Conceitos de gestão de memória – conceitos importantes que precisa de conhecer para ajudar a manter a sua instância do Memorystore em bom estado.
Operações com utilização intensiva de memória: operações que podem causar pressão na memória.
Monitorize a utilização de memória da sua instância – métricas que deve monitorizar para saber como a sua instância usa a memória.
Resolver uma condição de falta de memória - passos a seguir quando resolve problemas relacionados com uma condição de falta de memória.
Ajuste o tamanho da instância do Memorystore: em vez de criar uma instância com aprovisionamento excessivo, saiba como ajustar o tamanho da instância.
Conceitos de gestão de memória
Esta secção apresenta conceitos que tem de compreender para gerir a utilização de memória da sua instância.
Capacidade da instância
- A capacidade da instância é a quantidade de memória que aprovisiona em gigabytes (GB) e o que lhe é cobrado. Para mais detalhes sobre a seleção da capacidade da instância certa, consulte o artigo Ajuste o tamanho da sua instância do Memorystore.
Configuração maxmemory
Maxmemory é uma configuração do Redis que lhe permite definir o limite de memória em que a sua política de remoção entra em vigor. O Memorystore for Redis designa esta configuração como
maxmemory-gb
. Quando cria uma instância,maxmemory-gb
é definido como a capacidade da instância. Consoante a métrica da taxa de utilização da memória do sistema, pode ter de diminuir o limite demaxmemory-gb
para fornecer sobrecarga de memória para picos de carga de trabalho.Para mais detalhes, consulte o artigo Faça a gestão da taxa de utilização da memória do sistema.
Para saber como ajustar
maxmemory-gb
, consulte o artigo Configurar instâncias do Redis.
Rácio de utilização da memória do sistema
A métrica Rácio de utilização da memória do sistema permite-lhe medir a utilização de memória de uma instância relativamente à memória do sistema. A memória do sistema é gerida automaticamente pelo Memorystore para processar picos de utilização de memória causados por operações com utilização intensiva de memória e fragmentação de memória, o que é comum no Redis de código aberto.
Se a métrica de rácio de utilização da memória do sistema exceder 80%, isto indica que a instância está sob pressão de memória e deve seguir as instruções em Gerir o rácio de utilização da memória do sistema. Se não tomar medidas e a utilização de memória continuar a aumentar, corre o risco de uma falha de instância devido a memória insuficiente. A métrica da taxa de utilização da memória do sistema pode exceder 80% devido à fragmentação da memória. Em alternativa, se a métrica aumentar rapidamente para 80% ou mais, pode ter usado uma das operações com utilização intensiva de memória.
Deve ter uma taxa de utilização da memória do sistema de 50% ou menos durante as atualizações de manutenção. Além disso, por vezes, a exportação requer uma taxa de utilização da memória do sistema de 50% ou menos.
Memória usada
- A métrica memória usada mostra a quantidade de dados na sua instância do Memorystore. A memória usada de uma instância pode aumentar até ao limite de configuração de
maxmemory-gb
. Quando a memória usada excede o seu limite demaxmemory-gb
, a sua política de remoção entra em vigor.
Política de despejo
A política de remoção da sua instância (também conhecida como política maxmemory) determina como o Redis remove chaves quando os dados da instância atingem o limite de
maxmemory-gb
. O Redis remove chaves como parte do exemplo de utilização normal da cache. A remoção de chaves ocorre como um processo em segundo plano. Por isso, as chaves não são removidas imediatamente após atingir o limite demaxmemory-gb
. Uma taxa de gravação elevada pode exceder a remoção de chaves, o que resulta numa condição de falta de memória.A política de remoção predefinida de uma instância do Memorystore é
volatile-lru
. Se estiver a usar umavolatile-*
política de remoção, certifique-se de que está a definir TTLs em chaves que quer que expirem. Caso contrário, o Redis não tem chaves para remover.Para ver uma lista de políticas de despejo, consulte Políticas de maxmemory.
Para saber como alterar a política de remoção, consulte o artigo Configurar instâncias do Redis.
Fragmentação da memória
- A fragmentação da memória pode fazer com que a sua instância do Memorystore fique sem memória, mesmo quando a proporção de memória usada para
maxmemory-gb
é baixa. A fragmentação da memória ocorre quando o sistema operativo atribui páginas de memória que o Redis não consegue utilizar totalmente após operações repetidas de escrita e eliminação. A acumulação destas páginas pode fazer com que o sistema fique sem memória e, eventualmente, provocar uma falha no servidor Redis. A configuração doactivedefrag
Redis pode ajudar a reduzir a fragmentação.
Desfragmentação ativa
As versões 4.0 e superiores do Redis oferecem uma configuração
activedefrag
. Se possível, deve criar a instância do Memorystore com o Redis 4.0. O Memorystore defineactivedefrag
como "não" por predefinição. Definiractivedefrag
como "sim" tem um custo de CPU, mas pode ajudar a mitigar a fragmentação da memória, o que contribui para problemas de falta de memória.Se a métrica da taxa de utilização da memória do sistema indicar fragmentação da memória, deve ativar a opção
activedefrag
. Caso contrário,activedefrag
continua a ser uma definição opcional.
Operações com utilização intensiva de memória
As seguintes operações usam uma quantidade significativa de memória, especialmente quando executadas em conjunto com uma taxa de gravação elevada:
Operação de exportação
A funcionalidade de exportação do Memorystore usa a operação BGSAVE do Redis, que usa a cópia na gravação. Consoante o tamanho dos dados, o volume de gravação e as chaves acedidas, a memória necessária para uma exportação pode ser o dobro do espaço ocupado pelos seus dados. Por conseguinte, para que as exportações sejam bem-sucedidas, pode ter de reduzir o limite de maxmemory-gb
para 50% da capacidade da instância durante as exportações.
Operações de dimensionamento e atualização de versão
Dimensionar ou atualizar durante períodos de carga de escrita elevada pode exercer pressão sobre a memória da sua instância devido à sobrecarga de memória causada pela replicação. Além disso, uma carga de leitura elevada pode aumentar o tamanho do buffer de saída do Redis, o que leva a uma maior pressão sobre a memória. Se uma operação de dimensionamento ou atualização falhar devido à pressão da memória, deve:
- Reduza o
maxmemory-gb
para 50% da capacidade da instância antes de uma operação de dimensionamento/atualização. Se possível, também deve diminuir o maxmemory durante os períodos de tráfego de instâncias baixo, porque isso reduz o impacto negativo que a diminuição do maxmemory tem na sua taxa de acertos da cache. - Escale/atualize durante períodos de poucas gravações.
Manutenção
A manutenção também adiciona pressão de memória à sua instância. Deve tomar medidas para que a métrica Rácio de utilização da memória do sistema seja de 50% ou inferior no momento da manutenção agendada. Pode agendar a manutenção para uma altura em que o tráfego de instâncias seja baixo ou aumentar temporariamente o tamanho da instância durante o período de manutenção para que a métrica Rácio de utilização da memória do sistema seja de 50% ou inferior.
Monitorize a utilização de memória da sua instância
Monitorize as métricas e defina os alertas descritos nesta secção. Estas métricas e alertas dão-lhe informações sobre a utilização de memória da sua instância. Para saber como ver métricas e definir alertas, consulte o artigo Monitorizar instâncias do Redis.
Métricas relacionadas com a gestão de memória
Métrica | Endereço métrico completo |
---|---|
Maxmemory | redis.googleapis.com/stats/memory/maxmemory |
Utilização de memória | redis.googleapis.com/stats/memory/usage |
Rácio de utilização da memória | redis.googleapis.com/stats/memory/usage_ratio |
Duração da sobrecarga da memória do sistema | redis.googleapis.com/stats/memory/system_memory_overload_duration |
Rácio de utilização da memória do sistema | redis.googleapis.com/stats/memory/system_memory_usage_ratio |
Relação de resultados da cache | redis.googleapis.com/stats/memory/cache_hit_ratio |
Chaves com prazo de validade | redis.googleapis.com/keyspace/keys_with_expiration |
Chaves expiradas | redis.googleapis.com/stats/expired_keys |
Chaves removidas | redis.googleapis.com/stats/evicted_keys |
Rácio de utilização de memória
A métrica Rácio de utilização de memória indica o quão perto o tamanho do conjunto de trabalho está de atingir o limite de maxmemory-gb
. A menos que a política de remoção esteja definida como no-eviction, os dados da instância que atingem o maxmemory nem sempre indicam um problema. No entanto, a remoção de chaves é um processo em segundo plano que demora algum tempo. Se tiver uma taxa de gravação elevada, pode ficar sem memória antes de o Redis ter tempo para remover chaves para libertar espaço.
Rácio de utilização da memória do sistema
A taxa de utilização da memória do sistema é uma métrica essencial para monitorizar. Para garantir que a instância tem memória suficiente para suportar a sua carga de trabalho e outras operações com utilização intensiva de memória, é importante ter sempre memória do sistema suficiente disponível.
Defina um alerta para receber uma notificação se a métrica da taxa de utilização da memória do sistema atingir 80%. Se atingir 80%, deve começar a monitorizar mais atentamente a métrica da taxa de utilização da memória do sistema. Se a taxa de utilização da memória do sistema continuar a aumentar drasticamente, deve ativar o activedefrag, diminuir o maxmemory e ponderar dimensionar a sua instância.
Quando a taxa de utilização da memória do sistema atinge 100%, qualquer operação que aumente ainda mais a pegada de memória da sua instância é bloqueada e o Redis devolve o seguinte erro:
-OOM command not allowed under OOM prevention.
Consulte o artigo Faça a gestão da taxa de utilização da memória do sistema para ver mais detalhes.
Duração da sobrecarga da memória do sistema
Se a utilização de memória for demasiado elevada, o Memorystore bloqueia as escritas na instância para a manter em bom estado. A duração da sobrecarga da memória do sistema monitoriza durante quanto tempo a sua instância está no estado de escritas bloqueadas.
Deve definir um alerta
para esta métrica para saber quando as suas gravações estão a ser bloqueadas para a sua instância. Além disso, pode consultar esta métrica para resolver problemas relacionados com a receção do erro -OOM command not allowed under OOM prevention.
.
Relação de resultados da cache
Deve monitorizar regularmente a taxa de acertos da cache para saber qual a percentagem de pesquisas de chaves que são devolvidas com êxito pelas chaves na sua instância do Redis. Em geral, uma taxa de acertos na cache mais elevada é melhor do que uma taxa de acertos na cache mais baixa. Deve tomar nota da taxa de acertos da cache antes de fazer alterações de configuração significativas, como ajustar o limite de maxmemory-gb
, alterar a política de remoção ou dimensionar a instância. Em seguida, depois de modificar a instância, verifique novamente a taxa de acertos na cache para ver como a alteração afetou esta métrica.
Chaves com data de validade e chaves expiradas
A métrica do Stackdriver expirable keys monitoriza o número de chaves que estão
definidas para expirar. Se não existirem chaves com prazo de validade, pode ser um indicador de que não está a definir TTLs nas chaves. Nestes casos, quando os dados da instância atingem o limite de maxmemory-gb
, não existem chaves para remover, o que pode resultar numa condição de falta de memória se estiver a usar uma política de remoção de volatile-*
.
Outra métrica que pode monitorizar são as chaves expiradas. Se a métrica mostrar muitas chaves expiradas, mas continuar a ver pressão de memória na sua instância, deve diminuir maxmemory-gb
.
Resolver uma condição de falta de memória
Seguem-se algumas práticas recomendadas que deve seguir se a sua instância estiver a sofrer pressão de memória ou a ter erros de falta de memória.
Se estiver a usar uma
volatile-*
política de remoção, certifique-se de que está a definir TTLs nas chaves que quer que expirem. Consulte a Política de Despejo para ver mais detalhes.Para instâncias que executam o Redis 4.0 e superior:
- Ative o
activedefrag
para a sua instância. Consulte o artigo Desfragmentação ativa para ver mais detalhes.
- Ative o
Saiba como usar métricas para resolver problemas de condições de falta de memória e obter informações sobre a utilização de memória da sua instância: monitorize a utilização de memória da sua instância, faça a gestão da taxa de utilização da memória do sistema.
Saiba como ajustar o maxmemory quando executar operações com utilização intensiva de memória.
Se a métrica system memory usage ratio exceder 80%, reduza o limite de
maxmemory-gb
da instância. Consulte o artigo Faça a gestão da taxa de utilização da memória do sistema para ver mais detalhes.Considere aumentar a capacidade da instância.
Se continuar a deparar-se com condições de OOM, contacte o apoio técnico da Google Cloud Platform.
Ajuste o tamanho da sua instância do Memorystore
Esta secção aborda três abordagens distintas que ajudam a dimensionar corretamente a sua instância com base na sua carga de trabalho:
- O artigo Determine o tamanho inicial de uma instância do Memorystore explica como estimar o tamanho da instância antes de a criar.
- O artigo Monitorize a utilização de memória da sua instância descreve as métricas que fornecem informações úteis sobre a forma como a sua instância está a usar a memória.
- O artigo Faça a gestão da taxa de utilização da memória do sistema explica o que fazer se a taxa de utilização da memória do sistema exceder 80%.
Determine o tamanho inicial de uma instância do Memorystore
Primeiro, deve escolher se quer uma instância do nível padrão ou do nível básico. Para saber mais acerca dos níveis do Memorystore for Redis, consulte as capacidades dos níveis do Redis. Depois de selecionar o nível adequado para a sua aplicação, siga estes passos para determinar o tamanho da instância de que precisa:
Determine o tamanho dos seus dados.
- Estime o número de chaves e o tamanho médio das chaves que a sua aplicação vai escrever na instância do Redis. Multiplique estes valores para obter uma estimativa aproximada do tamanho da instância de que precisa.
Escolha uma política de despejo.
- Se usar a política
noeviction
maxmemory, o tamanho da instância tem de ser suficientemente grande para suportar o pico da carga de trabalho e o conjunto de trabalho. Se ficar sem memória com esta política maxmemory, a sua instância pode entrar numa condição de falta de memória. - Outras políticas de despejo não influenciam o tamanho da instância que deve aprovisionar.
- Se usar a política
Aprovisione memória adicional para instâncias do nível Standard
- Ao contrário das instâncias de nível básico, as instâncias de nível padrão reservam 10% da capacidade da instância como um buffer de replicação. Se escolher uma instância do nível padrão, certifique-se de que tem em conta a estimativa de dados do passo um e aprovisiona mais 10% para o buffer de replicação.
Estime a sua taxa de gravação média e de pico
- Se possível, estime a taxa de gravação e o tamanho das chaves que a sua aplicação vai usar. A taxa de gravação, comparada com a taxa de remoção de chaves, determina a rapidez com que a sua instância vai crescer ao longo do tempo.
Expanda para alcançar a relação de resultados da cache pretendida
- Monitorize a taxa de acertos na cache e, se não estiver a receber tantos acertos na cache bem-sucedidos quanto quer, significa que tem de aumentar o tamanho da instância ou certificar-se de que a sua aplicação está a escrever as chaves na instância do Memorystore que estão a ser pedidas e não cumpridas.
Determine se a sua instância está a bloquear escritas devido a uma condição de falta de memória
Se receber o seguinte erro:
-OOM command not allowed under OOM prevention.
Em seguida, verifique se:
- A métrica da taxa de utilização da memória do sistema excedeu 80% imediatamente antes de a instância começar a ter problemas.
- A taxa de utilização da memória do sistema aumentou muito rapidamente antes de ocorrerem problemas com a sua instância.
- A métrica duração da sobrecarga da memória do sistema mostrou valores acima de zero durante o mesmo período em que teve escritas bloqueadas.
Se for o caso, isto indica provavelmente que a instância está a bloquear as gravações devido a uma condição de falta de memória.
Faça a gestão da taxa de utilização da memória do sistema
Defina um alerta para receber uma notificação se a métrica Rácio de utilização da memória do sistema exceder 80%. Se a taxa de utilização de memória do sistema exceder 80%, deve tomar as medidas adequadas para que a instância não fique sem memória. Consoante o volume de escrita e o padrão de acesso às chaves, a utilização da memória do sistema pode aumentar rapidamente para 100%. O Memorystore oferece as seguintes formas de gerir a proporção de utilização da memória do sistema:
- Ative a opção
activedefrag
para instâncias que executam a versão 4.0 e superior do Redis. - Diminua o limite de
maxmemory-gb
da sua instância. - Aumente a escala da instância.
- Escolha a política de despejo adequada.
- Defina TTLs em chaves voláteis.
- Elimine manualmente as chaves da sua instância.
Ative o activedefrag
Se a proporção de utilização da memória do sistema exceder 80%, ative o activedefrag
(para instâncias que executam o Redis versão 4.0 e superior). A desfragmentação pode demorar horas a libertar memória fragmentada. Se o tráfego de escrita for elevado, a desfragmentação por si só pode não ser suficiente para impedir que a instância fique sem memória. Por conseguinte, pode ter de implementar as seguintes recomendações:
Diminua o limite de maxmemory da sua instância
Se a taxa de utilização da memória do sistema exceder 80%, deve diminuir o valor de maxmemory-gb
, mas, primeiro, veja como a taxa de utilização da memória do sistema mudou ao longo do tempo para determinar que novo limite de maxmemory-gb
deve definir.
Cenário 1: a relação de utilização da memória do sistema tem vindo a aumentar de forma gradual e lenta. A fragmentação é um problema provável e deve diminuir maxmemory-gb
em pequenos incrementos até que a taxa de utilização da memória do sistema se estabilize abaixo de 80%.
Cenário 2: a taxa de utilização da memória do sistema aumentou rapidamente e vê uma carga de escrita significativa na sua instância. Uma operação com utilização intensiva de memória
provavelmente causou o pico. Nesta situação, deve diminuir o limite maxmemory-gb
em incrementos maiores para garantir que a instância evita entrar numa condição de
falta de memória ou recupera de uma condição de falta de memória.
Deve ter em atenção que a redução de maxmemory pode diminuir a taxa de acertos da cache das suas instâncias.
Uma taxa de acertos na cache muito inferior indica que deve aumentar a escala da sua instância para que a sua aplicação possa tirar partido das vantagens da utilização do Redis. Para saber como ajustar a configuração do maxmemory-gb
, consulte o artigo Configurar instâncias do Redis.
Aumente a escala da sua instância
Siga as instruções em Dimensionar instâncias do Redis para aumentar a capacidade da instância.
Exemplo de escalabilidade de maxmemory:
Se tiver uma instância de 10 GB com maxmemory-gb
definida como 8 GB, tem 8 GB para armazenar chaves e 2 GB de sobrecarga de memória. Se dimensionar a instância para 20 GB,
maxmemory-gb
é dimensionado para 16 GB. Por conseguinte, a sua instância tem agora 16 GB de memória para armazenar chaves e 4 GB de sobrecarga.
Consulte o artigo Escalar instâncias do Redis para ver
instruções sobre como aumentar ou diminuir o tamanho da sua instância.
Escolha a política de despejo adequada
Se estiver a armazenar dados voláteis, escolha uma das volatile-*
políticas de despejo.
Se estiver a armazenar dados não voláteis, escolha uma das allkeys-*
políticas.
Elimine manualmente chaves da sua instância
Pode melhorar as condições de falta de memória eliminando chaves da sua instância manualmente. Esta é uma solução temporária que ajuda a melhorar o estado de funcionamento da sua instância.