Recomendaciones para la administración de memoria

Una instancia de Memorystore para Redis, si no se administra y se configura de forma correcta, puede experimentar la presión de la memoria, lo 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

En esta sección, se presentan los 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 aplica 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 proporción de uso de memoria del sistema, es posible que debas reducir el límite de maxmemory-gb para proporcionar sobrecarga de memoria a los picos 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 realizas ninguna acción y el uso de memoria continúa aumentando, corres el riesgo de una falla de la instancia debido a que no hay suficiente memoria. La métrica de proporción de uso de memoria del sistema puede superar el 80% debido a la fragmentación de memoria. Como alternativa, si la métrica aumenta rápidamente al 80% o más, es posible que hayas usado una de las operaciones de uso intensivo de memoria.

Memoria en uso

  • La métrica memoria usada muestra cuántos datos hay en tu instancia de Memorystore. La memoria usada de una instancia puede aumentar hasta el límite de configuración de maxmemory-gb. Cuando la memoria usada excede tu límite de maxmemory-gb, entra en vigencia tu política de expulsión.

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 tu instancia alcanzan el límite de maxmemory-gb. Redis quita las claves como parte del caso de uso normal de caché. La expulsión de claves se produce como un proceso en segundo plano, por lo que las claves no se expulsan inmediatamente después de que se alcanza el límite de maxmemory-gb. Una tasa de escritura alta podría aumentar la expulsión de claves, lo que genera 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 volatile-*, asegúrate de configurar TTL en claves que quieres 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 hacer que tu instancia de Memorystore se quede sin memoria, incluso cuando la proporción de la memoria usada en maxmemory-gb es baja. La fragmentación de memoria se produce cuando el sistema operativo asigna páginas de memoria que Redis no puede usar completamente después de operaciones repetidas de escritura y eliminación. La acumulación de esas páginas puede hacer que el sistema se quede sin memoria y, finalmente, cause que falle el servidor de Redis. La configuración de Redis activedefrag 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. Memorystore configura activedefrag como “no” de forma predeterminada. Configurar activedefrag como “sí” viene con un comercio de CPU, pero puede ayudar a mitigar la fragmentación de la memoria, lo que contribuye a problemas 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 sigue siendo una configuración opcional.

Operaciones con uso intensivo de memoria

Las siguientes operaciones usan una memoria significativa, en especial cuando se ejecutan en conjunto 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 copia en escritura. Según el tamaño de los datos, el volumen de escritura y las claves tocadas, la memoria requerida para una exportación puede ser el doble del espacio que ocupan tus datos. Por lo tanto, para que las exportaciones se realicen con éxito, es posible que debas reducir el límite de maxmemory-gb al 50% de tu capacidad de instancia durante las exportaciones.

Escalamiento y operaciones de actualización de versión para instancias de nivel Estándar

El escalamiento o la actualización durante los períodos de carga de escritura alta pueden provocar presión de memoria en la instancia debido a la sobrecarga de memoria causada por la replicación. Si una operación de escalamiento o de actualización falla debido a la presión en la memoria, debes realizar las siguientes acciones:

  • 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

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 obtener información sobre cómo ver las métricas y configurar alertas, consulta Supervisa instancias de Redis.

Métrica Dirección de la métrica completa
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 tasa de uso de memoria indica qué tan cerca está el tamaño de tu conjunto de trabajo de alcanzar el límite de maxmemory-gb. A menos que la política de expulsión esté configurada para la omisión, los datos de instancia que alcanzan la cantidad máxima de memoria 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 para liberar espacio.

Proporción de uso de memoria del sistema

La tasa de uso de memoria del sistema es una métrica esencial para supervisar. A fin de garantizar que la instancia tenga memoria suficiente para admitir tu carga de trabajo y otras operaciones de uso intensivo de memoria, es importante tener siempre 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 llega al 80%, deberías comenzar a supervisar más de cerca la métrica de proporción de uso de memoria del sistema. Si la proporción de uso de memoria del sistema sigue aumentando de manera drástica, debes activar activedefrag, disminuir la memoria máxima y considerar el escalamiento de tu instancia.

Una vez que la proporción del uso de memoria del sistema alcanza el 100%, cualquier operación que aumenta aún más la huella 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 la instancia para mantener tu instancia en buen estado. La duración de sobrecarga de memoria del sistema realiza un seguimiento de la duración de la instancia en el estado de operaciones de escritura bloqueadas.

Debes configurar una alerta para esta métrica a fin de saber cuándo se bloquean las escrituras en tu instancia. Además, puedes consultar esta métrica para solucionar problemas 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

Las claves con vencimiento de Stackdriver supervisan la cantidad de claves configuradas para su vencimiento. Si no hay claves con vencimiento, puede indicar que no debes configurar los 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 memoria insuficiente.

Otra métrica que puedes supervisar son claves vencidas. Si la métrica muestra muchas claves vencidas, pero aún ves la presión de memoria en tu instancia, debes disminuir maxmemory-gb.

Resuelve una condición de falta de memoria

A continuación, se presentan algunas prácticas recomendadas que debes seguir si tu instancia experimenta presión de memoria o se está quedando sin errores de memoria.

  1. Si usas una política de expulsión 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.

  2. Para instancias que ejecutan Redis 4.0 y versiones posteriores, haz lo siguiente:

    1. Activa activedefrag para tu instancia. Consulta Desfragmentación activa para obtener más detalles.
  3. 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.

  4. Obtén información sobre cómo ajustar la memoria máxima cuando se ejecutan operaciones de uso intensivo de memoria.

  5. 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.

  6. Considera aumentar la capacidad de escalamiento vertical de tu instancia.

  7. 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 explican tres enfoques distintos que te ayudan a redimensionar tu instancia en función de tu carga de trabajo:

Determina el tamaño inicial de una instancia de Memorystore

En primer lugar, debes elegir si deseas un nivel Estándar o una instancia de nivel Básico. A fin de obtener más información sobre los niveles de Memorystore para Redis, consulta Capacidades de nivel de Redis. Una vez que hayas seleccionado el nivel adecuado para tu aplicación, sigue estos pasos a fin de determinar el tamaño de instancia que necesitas:

  1. Determina el tamaño de tus datos.

    • Calcula la cantidad de claves y el tamaño promedio de las claves que la aplicación escribirá en tu instancia de Redis. Multiplica estos valores para obtener una estimación aproximada del tamaño de la instancia que necesitas.
  2. 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.
  3. Aprovisiona memoria adicional para las instancias de nivel Estándar

    • A diferencia de las instancias de nivel Básico, las instancias de nivel Estándar reservan el 10% de capacidad de la instancia como un búfer de replicación. Si eliges una instancia de nivel Estándar, asegúrate de realizar la estimación de datos del paso 1 y aprovisionar un 10% adicional para el búfer de replicación.
  4. 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. La tasa de escritura en comparación con la tasa de eliminación de claves determina qué tan rápido crecerá tu instancia con el tiempo.
  5. 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:

  1. La métrica de proporción de uso de memoria del sistema superó el 80% antes de que tu instancia comenzará a experimentar problemas.
  2. La proporción de uso de memoria del sistema aumentó mucho antes de que se produzcan problemas con tu instancia.
  3. 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 probablemente indica que la instancia está bloqueando las escrituras debido a una condición de falta de memoria.

Administra la proporción de uso de memoria del sistema

Configura una alerta para que te notifique si la métrica de tasa de uso de memoria del sistema supera el 80%. Si la tasa de uso de memoria del sistema supera el 80%, debes realizar la acción apropiada 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 la memoria del sistema puede aumentar al 100% con rapidez. Memorystore proporciona las siguientes formas 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.
  • Disminuye el límite maxmemory-gb de tu instancia.
  • Escala verticalmente la instancia.
  • Elige la política de expulsión adecuada.
  • Establece los TTL en claves volátiles.
  • Borra las claves de tu instancia de forma manual.

Activa activedefrag

Si la proporción de uso del memoria del sistema supera el 80%, activa activedefrag (para las instancias que ejecutan la versión 4.0 de Redis 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 memoria máxima 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: Se aumentó rápidamente la proporción de uso de memoria del sistema y ves una carga de escritura significativa en tu instancia. Una operación de memoria intensiva probablemente haya causado el pico. En esta situación, debes reducir el límite de maxmemory-gb en incrementos más grandes para garantizar que la instancia evite ingresar una condición de memoria insuficiente o se recupere de una condición de memoria insuficiente. Debes tener en cuenta que reducir la cantidad máxima de memoria puede reducir la tasa de aciertos de caché de tus instancias. Una tasa de aciertos de caché mucho más baja indica que debes escalar verticalmente tu instancia para que tu aplicación pueda beneficiarse de las ventajas de usar Redis. Para aprender a 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 memoria si borras las claves de tu instancia de forma manual. Esta es una solución temporal que te ayuda a mejorar el estado de tu instancia.