sql >> Base de Datos >  >> NoSQL >> Redis

memoria redis y picos de cpu

Al experimentar más con esto y leer sobre la persistencia de redis, creo que se pueden hacer las siguientes observaciones:

  • Al usar RDB (la configuración predeterminada), redis se bifurcará cada vez que save se activa la operación, que (de forma predeterminada) se establece en una vez cada 15 minutos como mínimo . Cuando se realizan más escrituras en Redis, las escrituras RDB son tan frecuentes como una vez cada 60 segundos .
  • Cada bifurcación usará una asignación de memoria de "copia en escritura", lo que significa que aunque la memoria no se duplicará, aparecerá en herramientas como ps , htop y similares.
  • La bifurcación en sí puede ser una operación con un uso intensivo de la CPU, especialmente en hosts virtuales basados ​​en xen (que es lo que estamos usando actualmente).
  • La operación de escritura parece sobrescribir completamente el archivo RDB existente. No escribe solo los cambios, sino que los vuelca entero conjunto de datos a disco.

Entonces, en un host virtual modesto con 4 Gb de RAM y un conjunto de datos de alrededor de 750 Mb (en el momento en que publiqué la pregunta), esto comienza a ser bastante "caro". Observamos esos picos de CPU/memoria, así como un aumento de IO, incluso con un uso de redis/carga bastante moderado.

Entonces, para responder a mi propia pregunta, este parece ser el comportamiento "esperado".

En cuanto a mejorar la situación, optamos por cambiar nuestra configuración para usar una combinación de RDB y AOF. AOF (Agregar solo archivo), parece que solo escribe cambios al disco Puede (y debe) configurar el archivo AOF para reescribir (usando auto-aof-rewrite-percentage y auto-aof-rewrite-min-size ajustes). También es recomendable seguir usando RDB para las instantáneas. Sin embargo, en esta configuración, probablemente pueda realizar reescrituras/instantáneas completas con menos frecuencia y aun así mantener un rendimiento bastante bueno y una durabilidad aún mejor.