web-dev-qa-db-fra.com

Redis: Afficher la taille de la base de données / la taille des clés

Mon instance de redis semble devenir très volumineuse et j'aimerais savoir laquelle des multiples bases de données que j'utilise contient combien de mémoire. La commande INFO de Redis ne fait que me montrer la taille totale et le nombre de clés par base de données, ce qui ne me donne pas beaucoup d'informations. apprécié.

La documentation de Redis ne m'indique aucune commande qui puisse restituer la mémoire consommée de certaines clés, donc je suppose que si un code buggy écrit beaucoup de "corbeille" dans redis, cela pourrait être vraiment difficile à trouver ...

74
Bernhard Vallant

Donc, ma solution à mon propre problème: après avoir joué avec redis-cli un peu plus longtemps, j'ai découvert que DEBUG OBJECT <key> révèle quelque chose comme le serializedlength de key, qui était en fait quelque chose que je cherchais ...

Pour une base de données complète, vous devez regrouper toutes les valeurs de KEYS * qui ne devrait pas être trop difficile avec un langage de script de votre choix ...

La mauvaise chose est que redis.io n'a pas vraiment beaucoup d'informations sur DEBUG OBJECT .

102
Bernhard Vallant

La solution des commentaires mérite sa propre réponse:

redis-cli --bigkeys
55
miracle2k

MEMORY USAGE key La commande vous donne le nombre d'octets qu'une clé et sa valeur doivent être stockés dans la RAM.

L'utilisation rapportée est le total des allocations de mémoire pour les frais généraux de données et administratifs qu'une clé nécessite pour sa valeur (documentation source redis)

17
dogfish

Jetez un coup d'œil à ce projet, il affiche des statistiques intéressantes sur les espaces clés basés sur les regex et les préfixes. Il utilise le DEBUG OBJECT commande et balaie la base de données, identifiant des groupes de clés et estimant le pourcentage d'espace occupé.

https://github.com/snmaynard/redis-audit

La sortie ressemble à ceci:

Summary  

---------------------------------------------------+--------------+-------------------+---------------------------------------------------  
Key                                                | Memory Usage | Expiry Proportion | Last Access Time                                    
---------------------------------------------------+--------------+-------------------+---------------------------------------------------  
notification_3109439                               | 88.14%       | 0.0%              | 2 minutes                               
user_profile_3897016                               | 11.86%       | 99.98%            | 20 seconds  
---------------------------------------------------+--------------+-------------------+---------------------------------------------------  

Ou celui-ci: https://github.com/sripathikrishnan/redis-rdb-tools qui effectue une analyse complète de l’espace clé en analysant un fichier dump.rdb hors connexion. Celui-ci fonctionne bien aussi. Il peut vous donner la taille moy/min/max pour les entrées de votre base de données et le fera même en fonction d’un préfixe.

15
jumand

Vous trouverez peut-être très utile de goûter aux clés Redis et de les regrouper par type. Salvatore a écrit un outil appelé redis-sampler qui émet environ 10000 commandes RANDOMKEY suivies d'un TYPE sur les clés récupérées. En quelques secondes ou minutes, vous devriez obtenir une vue assez précise de la distribution des types de clé.

J'ai écrit une extension (malheureusement pas n'importe où open-source car elle est liée au travail), qui ajoute un peu d'introspection de noms de clés via des expressions régulières qui vous donnent une idée des types de clés d'application (en fonction de la structure de dénomination utilisée). utilisant), sont stockés dans Redis. Combiné à la sortie plus générale de redis-sampler, cela devrait vous donner une très bonne idée de ce qui se passe.

7
rlotun

Peut-être que vous pouvez faire une introspection sur le fichier db. Le protocole est relativement simple (mais pas bien documenté), vous pouvez donc écrire un analyseur syntaxique pour déterminer les clés individuelles occupant beaucoup de place.


Nouvelles suggestions:

Avez-vous essayé d'utiliser MONITOR pour voir ce qui est écrit, en direct? Peut-être que vous pouvez trouver le problème avec les données en mouvement.

3
Donald Miner

Vous pouvez utiliser une application .net https://github.com/abhiyx/RedisSizeCalculator pour calculer la taille de la clé redis,

S'il vous plaît n'hésitez pas à donner vos commentaires pour le même

2
abhi