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

Cómo analizar y optimizar el uso de la memoria en Redis

Redis es un almacén de datos en memoria, lo que significa que todo el conjunto de datos se almacena en la memoria (RAM). Si bien esto es excelente para el rendimiento, cuando el tamaño de los datos comienza a crecer, se debe agregar más y más RAM para almacenar todos esos datos. Esto puede volverse prohibitivamente costoso rápidamente y, antes de que se dé cuenta, los costos del servidor comienzan a dispararse, dejándolo preocupado sobre si Redis puede escalar para usted de una manera rentable.

Este es, por supuesto, un problema común con cualquier base de datos, pero duele más en el caso de las bases de datos en memoria como Redis, ya que la RAM es más costosa que el almacenamiento secundario como discos duros y SSD. Sin embargo, debemos recordar que Redis no está destinado a almacenar terabytes de datos para su aplicación. Más bien, está destinado a ser utilizado para almacenar específicamente los datos que deben leerse (y, en menor medida, escribirse) a una velocidad muy alta, mientras que el resto de sus datos pueden almacenarse en bases de datos tradicionales respaldadas por disco. Con ese fin, Redis se usa con mayor frecuencia como un caché, que contiene solo los datos más activos con requisitos de alto rendimiento de lectura/escritura (piense en marcadores y mensajes de chat en tiempo real). Por lo tanto, el principal culpable del uso excesivo de memoria con Redis es el comportamiento de la aplicación. Es posible que su aplicación esté almacenando datos innecesarios que no se benefician de estar en Redis, o incluso datos completamente redundantes, es decir, datos que nunca se usan para ningún propósito, como lo hizo este usuario.

Para diagnosticar problemas con el uso excesivo de memoria, obviamente necesitamos una forma de averiguar qué teclas están usando la mayor cantidad de memoria para que podamos comenzar a razonar y comprender qué comportamientos de la aplicación están causando el problema. Recuerde, la optimización prematura es la raíz de todos los males y Redis no es una excepción. Necesitamos absolutamente visibilidad de las características de la memoria de nuestro conjunto de datos para comenzar a pensar dónde está el problema y cómo podemos solucionarlo. A continuación, exploramos algunas de las opciones disponibles para echar un vistazo a nuestros datos de Redis y encontrar aquellas áreas que pueden beneficiarse de la optimización a nivel de aplicación.

El comando USO DE MEMORIA

Este comando bien llamado está disponible desde Redis 4.0.0 y es el primer paso para depurar problemas de memoria con Redis. De los documentos:

El comando USO DE MEMORIA informa la cantidad de bytes que una clave y su valor requieren para almacenarse en la RAM. El uso informado es el total de asignaciones de memoria para datos y gastos generales administrativos que requiere una clave por su valor.

He aquí un ejemplo:

MEMORY USAGE users_by_reputation
(integer) 2923419

Se devuelve un entero simple que representa el número de bytes utilizados para almacenar la clave, el valor y los gastos generales internos. Para encontrar rápidamente el uso de memoria de una clave en particular, no hay nada más simple que esto.

Dos posibles contras son:

  1. Este comando solo está disponible en Redis 4.0.0 y versiones posteriores. Esto excluye a la mayoría de los proveedores de nube.
  2. Solo le indica la memoria utilizada por una sola tecla, por lo que, a menos que sepa de antemano qué tecla o teclas están causando el problema, este comando tiene una utilidad muy limitada.

redis-rdb-herramientas

redis-rdb-tools es una pequeña e ingeniosa herramienta de línea de comandos que va más allá del humilde MEMORY USAGE comando que discutimos anteriormente. Es una herramienta de generación de perfiles de memoria popular y poderosa creada específicamente para Redis que analiza un archivo de volcado de Redis (.rdb) y genera un perfil de memoria detallado para cada clave en el volcado, incluidos detalles como la memoria utilizada, el tipo de datos, la cantidad de elementos, etc. También le permite filtrar las claves que se procesan, por lo que, opcionalmente, puede ejecutar el análisis en una clave en particular o en un subconjunto de claves que coincidan con un patrón en particular. El resultado del análisis es un archivo CSV con columnas para la clave, memoria utilizada, tipo de datos, número de elementos, etc.

Esta herramienta es genial porque, a diferencia del MEMORY USAGE comando, que funciona solo en una sola tecla, esta herramienta analiza todo el conjunto de datos y escupe el resultado en formato CSV, lo que significa que puede cargarlo en cualquier base de datos SQL y realizar las consultas que desee, ordenándolo y filtrándolo como desee , con todo el poder de SQL, que le brinda una gran perspectiva del costo de memoria de sus datos. Como beneficio adicional, si usa versiones de Redis anteriores a la 4.0.0, aún puede usar esta herramienta para analizar claves individuales si lo desea, ya que esta herramienta funciona al analizar el volcado binario que produce Redis, en lugar de confiar en Redis para informar el uso de la memoria. Por otro lado, esta diferencia de enfoque significa que el uso de memoria calculado es más una estimación que una cifra exacta, como se menciona en la documentación del proyecto. Sin embargo, esto no es realmente un problema cuando nuestro objetivo es identificar problemas de uso de la memoria, ya que estamos más interesados ​​en los tamaños relativos de las claves y en identificar las claves que usan significativamente más memoria de la que deberían usar, por lo que algunos bytes aquí o allá es realmente irrelevante.

Herramientas de RDB

RDBTools es una herramienta basada en la web que ofrece varias herramientas para administrar y optimizar Redis, con el enfoque principal en la optimización de la memoria. Nació del proyecto de código abierto redis-rdb-tools discutido anteriormente. Con él, podemos analizar sin esfuerzo el uso de memoria de nuestro servidor Redis simplemente apuntando a nuestra instancia y haciendo clic en "Analizar". La herramienta descarga un volcado de la instancia en ejecución y lo analiza, presentándole una interfaz de usuario ingeniosa para filtrar y clasificar sus claves en función de varios parámetros como el uso de la memoria, el tipo de datos, la codificación, la cantidad de elementos, etc., similar a la línea de comando. herramienta, pero sin el esfuerzo manual que implica realizar un volcado, generar el perfil de memoria, configurar una base de datos, importar el perfil, escribir y ejecutar consultas, etc.

Aparte de eso, RDBTools también genera varios cuadros y gráficos a partir del perfil de memoria, lo que le permite obtener una visión aún mayor de sus datos, junto con recomendaciones para optimizar la configuración de su servidor Redis, según los estándares de la industria y años de experiencia optimizando Redis, para exprimir aún más ahorro de memoria. Además de la optimización de la memoria, hay una gran cantidad de otras características útiles para cualquier persona que use Redis, como una CLI enriquecida integrada, un editor de configuración con documentación en línea, un visualizador de datos en vivo enriquecido, etc.

RDBTools está disponible como imagen de Docker, disponible en Docker Hub y puede ejecutarse en su propia máquina, por lo que no debe preocuparse por la filtración de datos confidenciales. Una versión de prueba está disponible de forma gratuita para siempre, con algunos límites de uso. Consulte la página de precios para obtener más información sobre los distintos planes de pago disponibles.

Conclusión

Quedarse sin memoria es un problema inevitable cuando se utilizan bases de datos en memoria como Redis. Como todos los problemas de optimización, el primer paso es diagnosticar el problema correctamente. Es importante resistir la tentación de saltar rápidamente a conclusiones basadas en hipótesis no verificadas. "Medir, medir, medir" es el nombre del juego cuando se trata de optimización, y existen varios métodos y herramientas para obtener información sobre los problemas de memoria de Redis. Cuál es el mejor depende de sus necesidades específicas y de dónde se encuentre en el proceso de desarrollo. Para alguien que recién comienza a usar Redis, mantener un ojo en las teclas individuales podría ser suficiente para comenzar, mientras que para los grandes usuarios de Redis, ciertamente tiene sentido optar por una herramienta de GUI dedicada con todas las campanas y silbatos para ahorrar dolor más adelante. Cualquiera que sea su elección, siempre asegúrese de comprender la raíz de su problema antes de intentar resolverlo y recuerde, si tiene problemas de memoria con Redis, probablemente esté usando más memoria de la que realmente necesita.