Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

memória redis e picos de CPU


De experimentar mais com isso e ler sobre persistência redis, acho que as seguintes observações podem ser feitas:
  • Ao usar RDB (as configurações padrão), o redis bifurca cada vez que um save a operação é acionada, que (por padrão) é definida para uma vez a cada 15 minutos no mínimo . Quando mais gravações no Redis são executadas, as gravações RDB são tão frequentes quanto uma vez a cada 60 segundos .
  • Cada fork usará uma alocação de memória "copy-on-write", o que significa que, embora a memória não duplique - ela aparecerá assim em ferramentas como ps , htop e similares.
  • A bifurcação em si pode ser uma operação bastante intensiva em CPU, principalmente em hosts virtuais baseados em xen (que é o que estamos usando atualmente).
  • A operação de gravação parece substituir completamente o arquivo RDB existente. Ele não grava apenas as alterações, mas despeja o todo conjunto de dados para o disco.

Portanto, em um host virtual modesto com 4Gb de RAM e conjunto de dados de cerca de 750Mb (na época em que postei a pergunta), isso começa a se tornar bastante "caro". Observamos esses picos de CPU/memória, bem como aumento de E/S, mesmo sob uso moderado de carga/redis.

Então, para responder à minha própria pergunta - esse parece ser o comportamento "esperado".

Para melhorar a situação, optamos por mudar nossa configuração para usar uma combinação de RDB e AOF. AOF (Append Only File), parece apenas gravar alterações para disco. Você pode (e deve) configurar o arquivo AOF para reescrever (usando auto-aof-rewrite-percentage e auto-aof-rewrite-min-size definições). Também é aconselhável usar RDB para instantâneos. Nesta configuração, no entanto, você provavelmente pode fazer reescritas/snapshots completos com menos frequência e ainda manter um desempenho muito bom e durabilidade ainda melhor.