Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment analyser et optimiser l'utilisation de la mémoire dans Redis

Redis est un magasin de données en mémoire, ce qui signifie que l'intégralité de l'ensemble de données est stocké en mémoire (RAM). Bien que cela soit excellent pour les performances, lorsque la taille des données commence à augmenter, de plus en plus de RAM doit être ajoutée pour contenir toutes ces données. Cela peut rapidement devenir prohibitif et avant que vous ne vous en rendiez compte, les coûts des serveurs commencent à monter en flèche, ce qui vous laisse inquiet de savoir si Redis peut évoluer pour vous de manière rentable.

C'est, bien sûr, un problème courant avec n'importe quelle base de données, mais cela fait plus mal dans le cas des bases de données en mémoire comme Redis, car la RAM est plus chère que le stockage secondaire comme les disques durs et les SSD. Nous devons cependant nous rappeler que Redis n'est pas destiné à stocker des téraoctets de données pour votre application. Il est plutôt destiné à être utilisé pour stocker spécifiquement les données qui doivent être lues (et dans une moindre mesure, écrites) à un rythme très élevé, tandis que le reste de vos données peut être stocké sur des bases de données traditionnelles sauvegardées sur disque. À cette fin, Redis est le plus souvent utilisé comme cache, ne contenant que les données les plus actives avec des exigences de débit de lecture/écriture élevées (pensez aux tableaux de bord et aux messages de chat en temps réel). Par conséquent, le principal responsable de l'utilisation excessive de la mémoire avec Redis est le comportement de l'application. Votre application peut stocker des données inutiles qui ne bénéficient pas d'être dans Redis, ou même des données complètement redondantes, c'est-à-dire des données qui ne sont jamais utilisées à quelque fin que ce soit, comme l'était cet utilisateur.

Pour diagnostiquer les problèmes d'utilisation excessive de la mémoire, nous avons évidemment besoin d'un moyen de savoir quelles touches utilisent le plus de mémoire afin que nous puissions commencer à raisonner et comprendre quels comportements de l'application sont à l'origine du problème. N'oubliez pas que l'optimisation prématurée est la racine de tous les maux, et Redis ne fait pas exception. Nous avons absolument besoin de visibilité sur les caractéristiques de la mémoire de notre ensemble de données pour même commencer à réfléchir à l'endroit où se situe le problème et à la manière dont nous pouvons le résoudre. Ci-dessous, nous explorons certaines des options disponibles pour consulter nos données Redis et trouver les domaines qui peuvent bénéficier d'une optimisation au niveau de l'application.

La commande MEMORY USAGE

Cette commande bien nommée est disponible depuis Redis 4.0.0 et constitue la première étape pour déboguer les problèmes de mémoire avec Redis. À partir de la documentation :

La commande MEMORY USAGE indique le nombre d'octets qu'une clé et sa valeur nécessitent pour être stockées dans la RAM. L'utilisation signalée est le total des allocations de mémoire pour les données et les frais généraux administratifs qu'une clé nécessite pour sa valeur.

Voici un exemple :

MEMORY USAGE users_by_reputation
(integer) 2923419

Un entier simple représentant le nombre d'octets utilisés pour stocker la clé, la valeur et les surcharges internes est renvoyé. Pour trouver rapidement l'utilisation de la mémoire d'une clé particulière, rien de plus simple.

Deux inconvénients possibles :

  1. Cette commande n'est disponible que dans Redis 4.0.0 et versions ultérieures. Cela exclut la plupart des fournisseurs de cloud.
  2. Elle ne vous indique que la mémoire utilisée par une seule clé, donc à moins que vous ne sachiez à l'avance quelle ou quelles clés sont à l'origine du problème, cette commande a une utilité très limitée.

redis-rdb-tools

redis-rdb-tools est un petit outil de ligne de commande astucieux qui va au-delà de l'humble MEMORY USAGE commande dont nous avons parlé ci-dessus. Il s'agit d'un outil de profilage de mémoire populaire et puissant conçu spécifiquement pour Redis qui analyse un fichier de vidage Redis (.rdb) et génère un profil de mémoire détaillé pour chaque clé du vidage, y compris des détails tels que la mémoire utilisée, le type de données, le nombre d'éléments, etc. Il vous permet également de filtrer les clés qui sont traitées, de sorte que vous pouvez éventuellement exécuter l'analyse sur une clé particulière ou un sous-ensemble de clés qui correspondent à un modèle particulier. Le résultat de l'analyse est un fichier CSV avec des colonnes pour la clé, la mémoire utilisée, le type de données, le nombre d'éléments, etc.

Cet outil est si génial car, contrairement à l'MEMORY USAGE commande, qui ne fonctionne que sur une seule clé, cet outil analyse l'ensemble du jeu de données et crache le résultat au format CSV, ce qui signifie que vous pouvez le charger dans n'importe quelle base de données SQL et effectuer toutes les requêtes que vous voulez, en le triant et en le filtrant comme vous le souhaitez , avec toute la puissance de SQL, qui vous donne un excellent aperçu du coût de la mémoire de vos données. En prime, si vous utilisez des versions de Redis antérieures à 4.0.0, vous pouvez toujours utiliser cet outil pour analyser des clés uniques si vous le souhaitez, car cet outil fonctionne en analysant le vidage binaire produit par Redis, au lieu de compter sur Redis pour signaler l'utilisation de la mémoire. D'un autre côté, cette différence d'approche signifie que l'utilisation de la mémoire calculée est plus une estimation qu'un chiffre exact, comme mentionné dans la documentation du projet. Cependant, ce n'est pas vraiment un problème lorsque notre objectif est d'identifier les problèmes d'utilisation de la mémoire, car nous nous intéressons davantage aux tailles relatives des clés et à l'identification des clés qui utilisent beaucoup plus de mémoire qu'elles ne devraient utiliser, donc quelques octets ici ou là n'est vraiment pas pertinent.

Outils RDB

RDBTools est un outil Web qui propose plusieurs outils pour gérer et optimiser Redis, en mettant l'accent sur l'optimisation de la mémoire. Il est né du projet open source redis-rdb-tools décrit ci-dessus. Avec lui, nous pouvons facilement analyser l'utilisation de la mémoire de notre serveur Redis en pointant simplement sur notre instance et en cliquant sur "Analyser". L'outil télécharge un vidage à partir de l'instance en cours d'exécution et l'analyse, vous présentant une interface utilisateur élégante pour filtrer et trier vos clés en fonction de divers paramètres tels que l'utilisation de la mémoire, le type de données, l'encodage, le nombre d'éléments, etc., similaire à la ligne de commande outil, mais sans aucun effort manuel impliqué dans la prise d'un vidage, la génération du profil de mémoire, la configuration d'une base de données, l'importation du profil, l'écriture et l'exécution de requêtes, etc.

En dehors de cela, RDBTools génère également plusieurs tableaux et graphiques à partir du profil de mémoire, ce qui vous permet de mieux comprendre vos données, ainsi que des recommandations pour optimiser la configuration de votre serveur Redis, sur la base des normes de l'industrie et des années d'expérience dans l'optimisation de Redis, pour extraire encore plus d'économies de mémoire. Outre l'optimisation de la mémoire, il existe une foule d'autres fonctionnalités utiles pour quiconque utilise Redis, comme une CLI riche intégrée, un éditeur de configuration avec documentation en ligne, un visualiseur de données en direct riche, etc.

RDBTools est disponible sous forme d'image Docker, disponible dans Docker Hub, et peut être exécuté sur votre propre machine, vous n'avez donc pas à vous soucier de la fuite de données sensibles. Une version d'essai est disponible gratuitement pour toujours, avec certaines limites d'utilisation. Consultez la page de tarification pour plus d'informations sur les différents forfaits payants disponibles.

Conclusion

Le manque de mémoire est un problème inévitable lors de l'utilisation de bases de données en mémoire comme Redis. Comme tous les problèmes d'optimisation, la première étape consiste à diagnostiquer correctement le problème. Il est important de résister à la tentation de tirer rapidement des conclusions basées sur des hypothèses non vérifiées. "Mesurer, mesurer, mesurer" est le nom du jeu en matière d'optimisation, et il existe différentes méthodes et outils pour mieux comprendre vos problèmes de mémoire Redis. Lequel est le meilleur dépend de vos besoins spécifiques et de l'endroit où vous vous trouvez dans le processus de développement. Pour quelqu'un qui commence tout juste à utiliser Redis, garder un œil sur les clés individuelles peut suffire pour commencer, alors que pour les gros utilisateurs de Redis, il est certainement logique d'opter pour un outil graphique dédié avec toutes les cloches et sifflets pour éviter la douleur plus tard. Quel que soit votre choix, assurez-vous toujours de comprendre la racine de votre problème avant d'essayer de le résoudre, et rappelez-vous que si vous rencontrez des problèmes de mémoire avec Redis, vous utilisez probablement plus de mémoire que vous n'en avez réellement besoin.