Una instancia de Memorystore para Redis, si no se administra y configura de forma correcta, puede experimentar una presión de memoria que puede afectar el rendimiento de la aplicación. En esta página, se describen las prácticas recomendadas que puedes usar para administrar de manera eficiente el uso de memoria de tu instancia.
En este tema:
Conceptos de administración de memoria: conceptos clave que debes conocer para mantener en buen estado tu instancia de Memorystore.
Operaciones que consumen mucha memoria: operaciones que pueden causar presión en la memoria.
Supervisa el uso de memoria de tu instancia: métricas que deberías supervisar para obtener información sobre cómo la instancia usa la memoria.
Resuelve una condición de falta de memoria: son los pasos que se deben seguir cuando se resuelven problemas relacionados con una condición de falta de memoria.
Cambia el tamaño de tu instancia de Memorystore: en lugar de crear una instancia con aprovisionamiento excesivo, obtén información sobre cómo ajustar el tamaño de tu instancia.
Conceptos de administración de memoria
En esta sección, se presentan conceptos que debes comprender para administrar el uso de memoria de tu instancia.
Capacidad de la instancia
- La capacidad de la instancia es la cantidad de memoria que se aprovisiona en Gigabytes (GB), y lo que se te cobra por eso. Para obtener más detalles sobre cómo seleccionar la capacidad de instancia correcta, consulta ajusta el tamaño de tu instancia de Memorystore.
Configuración de Maxmemory
Maxmemory es una configuración de Redis que te permite establecer el límite de memoria en el que se implementa la política de expulsión. Memorystore para Redis designa esta configuración como
maxmemory-gb
. Cuando creas una instancia,maxmemory-gb
se establece en la capacidad de la instancia. Según la métrica de la proporción de uso de memoria del sistema, es posible que debas reducir el límite demaxmemory-gb
a fin de proporcionar sobrecarga de memoria para los aumentos de carga de trabajo.Para obtener más detalles, consulta Cómo administrar la proporción de uso de memoria del sistema.
Para aprender a ajustar
maxmemory-gb
, consulta Configura instancias de Redis.
Proporción de uso de memoria del sistema
La métrica de proporción de uso de memoria del sistema te permite medir el uso de la memoria de una instancia en relación con la memoria del sistema. Memorystore administra la memoria del sistema de forma automática para manejar los aumentos de uso de memoria que generan las operaciones de uso intensivo de memoria y la fragmentación de memoria, que son comunes en Redis de código abierto.
Si la métrica de proporción de uso de memoria del sistema supera el 80%, esto indica que la instancia está bajo presión de memoria y debes seguir las instrucciones en Administra la proporción de uso de memoria del sistema. Si no tomas ninguna medida y el uso de memoria sigue creciendo, corres el riesgo de que falle una instancia debido a la falta de memoria. La métrica de proporción de uso de memoria del sistema puede superar el 80% debido a la fragmentación de memoria. De manera alternativa, si la métrica aumenta con rapidez al 80% o más, es posible que hayas usado una de las operaciones que consumen mucha memoria.
Debes tener una proporción de uso de memoria del sistema del 50% o menos durante las actualizaciones de mantenimiento. Además, a veces, la exporting requiere una proporción de uso de memoria del sistema del 50% o menos.
Memoria en uso
- La métrica memoria usada muestra la cantidad de datos que hay en tu instancia de Memorystore. La memoria usada de una instancia puede aumentar hasta el límite de configuración
maxmemory-gb
. Cuando la memoria usada excede tu límite demaxmemory-gb
, la política de expulsión entra en vigor.
Política de expulsión
La política de expulsión de tu instancia (también conocida como política de maxmemory) determina cómo Redis expulsa las claves cuando los datos de la instancia alcanzan el límite de
maxmemory-gb
. Redis expulsa las claves como parte del caso de uso de caché normal. La expulsión de claves ocurre como un proceso en segundo plano, por lo que las claves no se expulsan de inmediato después de que se alcanza el límitemaxmemory-gb
. Una tasa de escritura alta puede superar la expulsión de claves, lo que da como resultado una condición de falta de memoria.La política de expulsión predeterminada de una instancia de Memorystore es
volatile-lru
. Si usas una política de expulsión devolatile-*
, asegúrate de configurar los TTL en las claves que deseas que venzan; de lo contrario, Redis no tiene claves para expulsar.Para obtener una lista de políticas de expulsión, consulta Políticas de maxmemory.
Para obtener información sobre cómo cambiar tu política de expulsión, consulta Cómo configurar instancias de Redis.
Fragmentación de memoria
- La fragmentación de memoria puede causar que tu instancia de Memorystore se quede sin memoria, incluso cuando la proporción de memoria usada para
maxmemory-gb
sea baja. La fragmentación de memoria ocurre cuando el sistema operativo asigna páginas de memoria que Redis no puede usar por completo después de operaciones repetidas de escritura y eliminación. La acumulación de esas páginas puede provocar que el sistema se quede sin memoria y, finalmente, que el servidor de Redis falle. La configuraciónactivedefrag
de Redis puede ayudar a reducir la fragmentación.
Desfragmentación activa
Las versiones de Redis 4.0 y posteriores proporcionan una configuración
activedefrag
. Si es posible, debes crear tu instancia de Memorystore con Redis 4.0. En Memorystore,activedefrag
se configura como “no” de forma predeterminada. Configuraractivedefrag
en “sí” implica una compensación de CPU, pero puede ayudar a mitigar la fragmentación de memoria, lo que contribuye a problemas de falta de memoria.Si la métrica de proporción de uso de memoria del sistema indica la fragmentación de memoria, debes activar
activedefrag
. De lo contrario,activedefrag
seguirá siendo una configuración opcional.
Operaciones con uso intensivo de memoria
En las siguientes operaciones, se usa una memoria significativa, en especial cuando se ejecutan junto con una tasa de escritura alta:
Operación de exportación
La función de exportación de Memorystore usa la operación BGSAVE de Redis, que usa la función de copia en escritura. Según el tamaño de los datos, el volumen de operaciones de escritura y las claves afectadas, la memoria requerida para una exportación puede ser el doble del tamaño del espacio que ocupan tus datos. Por lo tanto, para que las exportaciones se realicen correctamente, es posible que debas reducir el límite de maxmemory-gb
al 50% de la capacidad de tu instancia durante las exportaciones.
Operaciones de escalamiento y actualización de versiones
El escalamiento o la actualización durante períodos de carga de escritura alta pueden aumentar la presión de memoria en la instancia debido a la sobrecarga de memoria que causa la replicación. Además, una carga de lectura alta puede aumentar el tamaño del búfer de salida de Redis, lo que aumenta la presión de la memoria. Si una operación de escalamiento o actualización falla debido a la presión de la memoria, debes hacer lo siguiente:
- Reduce
maxmemory-gb
al 50% de la capacidad de la instancia antes de una operación de escalamiento o actualización. Si es posible, también debes reducir la memoria máxima durante los períodos del tráfico de instancia baja, ya que esto reduce el impacto negativo que produce reducir la cantidad máxima de memoria en la tasa de aciertos de caché. - Escala o actualiza durante períodos de escrituras bajas
Mantenimiento
El Mantenimiento también agrega presión de memoria a la instancia. Debes tomar medidas para que la métrica de proporción de uso de memoria del sistema esté del 50% o inferior en el momento del mantenimiento programado. Puedes hacerlo si programas para un momento en que el tráfico de la instancia sea bajo o si aumentas de manera temporal el tamaño de tu instancia durante el período de mantenimiento para que la métrica de proporción de uso de memoria del sistema sea del 50% o inferior.
Supervisa el uso de memoria de tu instancia
Supervisa las métricas y configura las alertas que se describen en esta sección. Estas métricas y alertas te brindan estadísticas sobre el uso de memoria de tu instancia. Para aprender a ver las métricas y configurar alertas, consulta Supervisa instancias de Redis.
Métricas relacionadas con la administración de memoria
Métrica | Dirección completa de la métrica |
---|---|
Maxmemory | redis.googleapis.com/stats/memory/maxmemory |
Uso de memoria | redis.googleapis.com/stats/memory/usage |
Proporción del uso de memoria | redis.googleapis.com/stats/memory/usage_ratio |
Duración de la sobrecarga de memoria del sistema | redis.googleapis.com/stats/memory/system_memory_overload_duration |
Proporción de uso de memoria del sistema | redis.googleapis.com/stats/memory/system_memory_usage_ratio |
Tasa de aciertos de caché | redis.googleapis.com/stats/memory/cache_hit_ratio |
Claves con fecha de vencimiento | redis.googleapis.com/keyspace/keys_with_expiration |
Claves vencidas | redis.googleapis.com/stats/expired_keys |
Claves expulsadas | redis.googleapis.com/stats/evicted_keys |
Proporción del uso de memoria
La métrica de proporción de uso de memoria indica qué tan cerca está el tamaño del conjunto de trabajo de alcanzar el límite de maxmemory-gb
. A menos que la política de expulsión esté configurada para no expulsar, los datos de la instancia que llegan a maxmemory no siempre indican un problema. Sin embargo, la expulsión de claves es un proceso en segundo plano que lleva tiempo. Si tienes una tasa de escritura alta, es posible que te quedes sin memoria antes de que Redis tenga tiempo de expulsar las claves a fin de liberar espacio.
Proporción de uso de memoria del sistema
La proporción de uso de memoria del sistema es una métrica fundamental que se debe supervisar. A fin de garantizar que la instancia tenga suficiente memoria para admitir tu carga de trabajo y otras operaciones que consumen mucha memoria, es importante que siempre tengas suficiente memoria del sistema disponible.
Configura una alerta para que te notifique si la métrica de proporción de uso de memoria del sistema alcanza el 80%. Si alcanza el 80%, debes comenzar a supervisar la métrica de proporción de uso de memoria del sistema con más detalle. Si la proporción de uso de memoria del sistema sigue aumentando de manera significativa, debes activar activedefrag, reducir maxmemory y considerar escalar tu instancia.
Una vez que la proporción de uso de memoria del sistema alcanza el 100%, cualquier operación que aumente aún más el espacio de memoria de tu instancia se bloquea y Redis muestra el siguiente error:
-OOM command not allowed under OOM prevention.
Consulta Administra la proporción de uso de memoria del sistema para obtener más detalles.
Duración de la sobrecarga de memoria del sistema
Si el uso de memoria es demasiado alto, Memorystore bloquea las operaciones de escritura en tu instancia para mantenerla en buen estado. La duración de la sobrecarga de memoria del sistema realiza un seguimiento del tiempo que tu instancia está en el estado de escritura bloqueada.
Debes configurar una alerta para esta métrica a fin de que sepas cuándo se bloquean las operaciones de escritura en tu instancia. Además, puedes volver a consultar esta métrica para solucionar problemas de recepción del error -OOM command not allowed under OOM prevention.
.
Tasa de aciertos de caché
Debes supervisar con frecuencia tu proporción de aciertos de caché para saber qué porcentaje de búsquedas de claves muestra las claves en tu instancia de Redis de forma correcta. En términos generales, una proporción de aciertos de caché alta es mejor que una proporción de aciertos de caché más baja. Debes tener en cuenta tu proporción de aciertos de caché antes de realizar cualquier cambio importante en la configuración, como ajustar el límite de maxmemory-gb
, cambiar la política de expulsión o escalar la instancia. Luego, después de modificar tu instancia, vuelve a verificar la proporción de aciertos de caché para ver cómo el cambio afectó a esta métrica.
Claves con fecha de vencimiento y claves caducadas
La clave de vencimiento de la métrica de Stackdriver supervisa la cantidad de claves que están configuradas para el vencimiento. Si no hay claves con vencimiento, puede ser una indicación de que no estás configurando TTL en las claves. En esos casos, cuando los datos de tu instancia alcanzan el límite de maxmemory-gb
, no hay claves para expulsar, lo que puede generar una condición de falta de memoria si usas una política de expulsión volatile-*
.
Otra métrica que puedes supervisar son las claves vencidas. Si la métrica muestra muchas claves vencidas, pero aún ves la presión de memoria en tu instancia, debes reducir maxmemory-gb
.
Resuelve una condición de memoria insuficiente
A continuación, se mencionan algunas prácticas recomendadas que debes seguir si tu instancia experimenta presión de memoria o se queda sin errores de memoria.
Si usas una política de expulsión de
volatile-*
, asegúrate de configurar los TTL en las claves que deseas que venzan. Consulta la Política de expulsión para obtener más detalles.Para instancias que ejecutan Redis 4.0 y versiones posteriores, haz lo siguiente:
- Activa
activedefrag
para tu instancia. Consulta Desfragmentación activa para obtener más detalles.
- Activa
Obtén más información sobre cómo usar métricas para resolver problemas de las condiciones de memoria y obtener información valiosa sobre el uso de la memoria de tu instancia: Supervisa el uso de memoria de tu instancia, Administra la proporción de uso de memoria del sistema.
Obtén más información sobre cómo ajustar la cantidad máxima de memoria cuando se ejecutan operaciones que requieren mucha memoria.
Si la proporción de uso de memoria del sistema supera el 80%, reduce el límite de
maxmemory-gb
de tu instancia. Consulta Administra la proporción de uso de memoria del sistema para obtener más detalles.Considera aumentar la capacidad de escalamiento vertical de tu instancia.
Si aún tienes condiciones de OOM, comunícate con el equipo de Asistencia de Google Cloud Platform.
Redimensiona la instancia de Memorystore
En esta sección, se abordan tres enfoques distintos que te ayudan a ajustar el tamaño de tu instancia según la carga de trabajo:
- En Determina el tamaño inicial de una instancia de Memorystore, se explica cómo estimar el tamaño de tu instancia antes de crearla.
- En Supervisa el uso de memoria de tu instancia, se describen las métricas que proporcionan información útil sobre la manera en que tu instancia usa la memoria.
- En Administra la proporción de uso de memoria del sistema, se explica qué hacer si la proporción de uso de memoria del sistema supera el 80%.
Determina el tamaño inicial de una instancia de Memorystore
Primero, debes elegir si quieres una instancia de nivel estándar o de nivel Básico. Para obtener más información sobre los niveles de Memorystore para Redis, consulta Funciones de nivel de Redis. Una vez que hayas seleccionado el nivel correcto para tu aplicación, sigue estos pasos a fin de determinar qué tamaño de instancia necesitas:
Determina el tamaño de tus datos.
- Estima la cantidad de claves y el tamaño promedio de las claves que escribirá la aplicación en tu instancia de Redis. Multiplica estos valores para obtener una estimación aproximada del tamaño de la instancia que necesitas.
Elige una política de expulsión.
- Si usas la política
noeviction
de maxmemory, el tamaño de la instancia debe ser lo suficientemente grande como para contener tu carga de trabajo máxima y tu conjunto de trabajo. Si te quedas sin memoria con esta política de maxmemory, tu instancia puede ingresar una condición de falta de memoria. - Otras políticas de expulsión no influyen en el tamaño de la instancia que debes aprovisionar.
- Si usas la política
Aprovisiona memoria adicional para instancias de nivel estándar
- A diferencia de las instancias de nivel Básico, las instancias de nivel estándar reservan el 10% de la capacidad de la instancia como un búfer de replicación. Si eliges una instancia de nivel Estándar, asegúrate de tomar la estimación de datos del paso uno y aprovisionar un 10% adicional para el búfer de replicación.
Calcula la tasa de escritura promedio y máxima
- Si es posible, estima la tasa de escritura y el tamaño de las claves que usará tu aplicación. En comparación con la tasa de eliminación de claves, la tasa de escritura determina la velocidad con la que crecerá la instancia con el tiempo.
Escala para alcanzar la tasa de aciertos de caché deseada.
- Supervisa la tasa de aciertos de caché y, si no obtienes tantos aciertos de caché exitosos como desees, esto significa que deberás aumentar el tamaño de la instancia o asegurarte de que tu aplicación esté escribiendo las claves en la instancia de Memorystore que se están solicitando y que no se completaron.
Determina si tu instancia bloquea las escrituras debido a una condición de memoria insuficiente
Si recibes el siguiente error, haz lo siguiente:
-OOM command not allowed under OOM prevention.
Comprueba lo siguiente:
- La métrica de proporción de uso de memoria del sistema superó el 80% antes de que tu instancia comenzará a experimentar problemas.
- La proporción de uso de memoria del sistema aumentó mucho antes de que se produzcan problemas con tu instancia.
- La métrica de duración de la sobrecarga de memoria del sistema mostró valores superiores a cero durante el mismo período en el que se experimentaron escrituras bloqueadas.
Si es así, esto indica que la instancia bloquea las escrituras debido a una condición de memoria insuficiente.
Administra la proporción de uso de memoria del sistema
Configura una alerta para que te notifique si la métrica de proporción de uso de memoria del sistema supera el 80%. Si la proporción de uso de memoria del sistema supera el 80%, debes tomar las medidas adecuadas para que la instancia no se quede sin memoria. Según el volumen de escritura y el patrón de acceso a las claves, el uso de memoria del sistema puede aumentar rápidamente al 100%. Memorystore ofrece las siguientes maneras de administrar la proporción de uso de memoria del sistema:
- Activa
activedefrag
para las instancias que ejecutan la versión 4.0 de Redis y versiones posteriores. - Reduce el límite de
maxmemory-gb
de tu instancia - Escala verticalmente la instancia.
- Elige la política de expulsión adecuada.
- Establece TTL en claves volátiles.
- Borra las claves de tu instancia de forma manual.
Activa activedefrag
Si la proporción de uso de memoria del sistema supera el 80%, activa activedefrag
(para instancias que ejecutan Redis versión 4.0 y versiones posteriores). La desfragmentación puede tardar horas en liberar memoria fragmentada. Si el tráfico de escritura es alto, es posible que la desfragmentación sola no sea suficiente para evitar que tu instancia se quede sin memoria. Por lo tanto, es posible que debas implementar las siguientes recomendaciones:
Reduce el límite de maxmemory de tu instancia
Si la proporción de uso de memoria del sistema excede el 80%, debes disminuir maxmemory-gb
, pero primero tienes que ver cómo cambió la proporción de uso de memoria del sistema con el tiempo para determinar qué límite nuevo de maxmemory-gb
establecer.
Situación 1: La proporción de uso de memoria del sistema ha escalado de forma gradual y detenida. La fragmentación es un posible problema, y deberías reducir maxmemory-gb
en pequeños incrementos hasta que la proporción de uso de memoria del sistema se estabilice por debajo del 80%.
Situación 2: la proporción de uso de memoria del sistema aumentó con rapidez y ves una carga de escritura significativa en tu instancia. Es probable que una operación que consume mucha memoria haya provocado el aumento repentino. En esta situación, debes reducir el límite de maxmemory-gb
en incrementos más grandes para asegurarte de que la instancia evite ingresar una condición de falta de memoria o se recupere de una condición de memoria insuficiente.
Debes tener en cuenta que reducir maxmemory puede reducir la tasa de aciertos de caché de las instancias.
Una tasa de aciertos de caché mucho menor indica que debes escalar verticalmente tu instancia para que tu aplicación pueda aprovechar las ventajas de usar Redis. Para obtener información sobre cómo ajustar la configuración de maxmemory-gb
, consulta Configura instancias de Redis.
Escala la instancia
Sigue las instrucciones en Escala instancias de Redis para aumentar la capacidad de tu instancia.
Ejemplo de escalamiento de memoria máxima:
Si tienes una instancia de 10 GB con maxmemory-gb
establecido en 8 GB, tienes 8 GB para almacenar claves y 2 GB de sobrecarga de memoria. Si escalas la instancia a 20 GB, maxmemory-gb
se escala a 16 GB. Por lo tanto, tu instancia ahora tiene 16 GB de memoria para almacenar claves y 4 GB de sobrecarga.
Consulta Escala instancias de Redis con el fin de obtener instrucciones para aumentar o disminuir el tamaño de la instancia.
Elige la política de expulsión adecuada
Si almacenas datos volátiles, elige una de las políticas de expulsión de volatile-*
.
Si almacenas datos que no son volátiles, elige una de las políticas allkeys-*
.
Borra las claves de tu instancia de forma manual
Puedes mejorar las condiciones de falta de memoria si borras claves de tu instancia de forma manual. Esta es una solución temporal que te ayuda a mejorar el estado de la instancia.