web-dev-qa-db-fra.com

Quel est le moyen le plus facile de trouver les plus gros objets de Redis?

J'ai un dump de 20 Go + RDB en production. Je pense qu'il existe un jeu de clés spécifique qui le gonfle ... Je voudrais avoir un moyen de toujours repérer les 100 premiers objets les plus importants de l'analyse de vidage statique ou de les demander au serveur lui-même, qui a d'ailleurs sur 7M objets.

Les outils d'analyse de vidage tels que rdbtools ne sont pas utiles dans ce cas d'utilisation (je pense) vraiment courant!

Je pensais écrire un script et parcourir l'ensemble de clés avec "l'objet de débogage de redis-cli", mais j'ai l'impression qu'il me manque un outil.

29
sscarduzio

Une option a été ajoutée à redis-cli: redis-cli --bigkeys

Exemple de sortie basé sur https://Gist.github.com/michael-grunder/9257326

$ ./redis-cli --bigkeys

# Press ctrl+c when you have had enough of it... :)
# You can use -i 0.1 to sleep 0.1 sec every 100 sampled keys
# in order to reduce server load (usually not needed).

Biggest string so far: day:uv:483:1201737600, size: 2
Biggest string so far: day:pv:2013:1315267200, size: 3
Biggest string so far: day:pv:3:1290297600, size: 5
Biggest zset so far: day:topref:2734:1289433600, size: 3
Biggest zset so far: day:topkw:2236:1318723200, size: 7
Biggest zset so far: day:topref:651:1320364800, size: 20
Biggest string so far: uid:3467:auth, size: 32
Biggest set so far: uid:3029:allowed, size: 1
Biggest list so far: last:175, size: 51


-------- summary -------

Sampled 329 keys in the keyspace!
Total key length in bytes is 15172 (avg len 46.12)

Biggest   list found 'day:uv:483:1201737600' has 5235597 items
Biggest    set found 'day:uvx:555:1201737600' has 47 members
Biggest   hash found 'day:uvy:131:1201737600' has 2888 fields
Biggest   zset found 'day:uvz:777:1201737600' has 1000 members

0 strings with 0 bytes (00.00% of keys, avg size 0.00)
19 lists with 5236744 items (05.78% of keys, avg size 275618.11)
50 sets with 112 members (15.20% of keys, avg size 2.24)
250 hashs with 6915 fields (75.99% of keys, avg size 27.66)
10 zsets with 1294 members (03.04% of keys, avg size 129.40)
60
Frank Farmer

redis-rdb-tools a un rapport de mémoire qui répond exactement à vos besoins. Il génère un fichier CSV avec de la mémoire utilisée par chaque clé. Vous pouvez ensuite le trier et trouver les clés Top x.

Il existe également un profileur de mémoire expérimental qui a commencé à faire ce dont vous avez besoin. Ce n'est pas encore complet et n'est donc pas documenté. Mais vous pouvez l'essayer - https://github.com/sripathikrishnan/redis-rdb-tools/tree/master/rdbtools/cli . Et bien sûr, je vous encourage à contribuer également!

4
Sripathi Krishnan

Je suis assez nouveau pour écrire des scripts. Je suis sorti avec ceci: 

for line in $(redis-cli keys '*' | awk '{print $1}'); do echo `redis-cli DEBUG OBJECT $line | awk '{print $5}' | sed 's/serializedlength://g'` $line; done; | sort -h

Ce script

  • Répertorie toutes les clés avec redis-cli keys "*"
  • Obtient la taille avec redis-cli DEBUG OBJECT
  • trie le script en fonction du nom, préfixe de la taille

Cela peut être très lent en raison du fait que bash boucle en boucle à travers toutes les clés redis. Vous avez peut-être besoin de 7 millions de clés pour mettre en cache la sortie des clés d'un fichier.

2
Trent Earl

Si vous avez des clés qui suivent ce modèle "A: B" ou "A: B: *", j'ai écrit un outil qui analyse à la fois le contenu existant et surveille des éléments tels que le taux de réussite, le nombre de get/sets, le trafic réseau. , durée de vie, etc. La sortie est similaire à celle ci-dessous.

https://github.com/alexdicianu/redis_toolkit

$ ./redis-toolkit report -type memory -name NAME
+----------------------------------------+----------+-----------+----------+
|                     KEY                | NR  KEYS | SIZE (MB) | SIZE (%) |
+----------------------------------------+----------+-----------+----------+
| posts:*                                |      500 |      0.56 |     2.79 |
| post_meta:*                            |      440 |     18.48 |    92.78 |
| terms:*                                |      192 |      0.12 |     0.63 |
| options:*                              |      109 |      0.52 |     2.59 |
1
Alex Dicianu

Essayez redis-memory-analyzer - un outil de la console permettant d’analyser l’espace clé Redis en temps réel et d’agréger les statistiques d’utilisation de la mémoire par motifs. Vous pouvez utiliser ces outils sans maintenance sur les serveurs de production. Il vous montre des statistiques détaillées sur chaque motif clé de votre service Redis. 

Vous pouvez également analyser Redis db avec tous les types Redis ou certains types sélectionnés, tels que "chaîne", "hachage", "liste", "set", "zset". Le modèle correspondant est également pris en charge.

RMA essaie également de distinguer les noms de clé par modèles. Par exemple, si vous avez des clés telles que "utilisateur: 100" et "utilisateur: 101", l'application sélectionnera le modèle commun "utilisateur: *" dans le résultat afin que vous puissiez analyser la plupart des données en détresse mémoire votre exemple.

0
misterion