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.
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)
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!
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
redis-cli keys "*"
redis-cli DEBUG OBJECT
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.
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 |
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.