Redis: Показать размер базы данных / размер для ключей - PullRequest
73 голосов
/ 03 октября 2011

Мой экземпляр Redis, кажется, становится очень большим, и я хотел бы выяснить, какая из множества имеющихся у меня там баз данных потребляет сколько памяти. Команда INFO в Redis просто показывает мне общий размер и количество ключей в базе данных, что не дает мне большого понимания ... Так что любые инструменты / идеи, которые дают мне больше информации при мониторинге сервера Redis, будут оценены.

Документация Redis не показывает мне никаких команд, которые могут возвратить использованную память определенных ключей, поэтому я предполагаю, что если какой-либо ошибочный код напишет много "мусора" для повторного редактирования, это может быть действительно трудно найти ...

Ответы [ 7 ]

98 голосов
/ 04 октября 2011

Итак, мое решение моей собственной проблемы: немного поиграв с redis-cli, я обнаружил, что DEBUG OBJECT <key> показывает что-то вроде serializedlength ключа, что на самом деле было тем, что я искал ...

Для всей базы данных вам нужно объединить все значения для KEYS *, что не должно быть слишком сложно с выбранным вами языком сценариев ...

Плохо то, что redis.io на самом деле не так много информации о DEBUG OBJECT.

53 голосов
/ 01 июня 2017

Решение из комментариев заслуживает своего ответа:

redis-cli --bigkeys
15 голосов
/ 11 декабря 2014

Посмотрите на этот проект, он выводит некоторые интересные статистические данные о пространствах клавиш на основе регулярных выражений и префиксов. Он использует команду DEBUG OBJECT и сканирует базу данных, идентифицируя группы ключей и оценивая процент занимаемого ими пространства.

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

Вывод выглядит так:

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  
---------------------------------------------------+--------------+-------------------+---------------------------------------------------  

Или вот этот: https://github.com/sripathikrishnan/redis-rdb-tools, который выполняет полный анализ всего пространства ключей, анализируя файл dump.rdb в автономном режиме. Этот тоже хорошо работает. Он может дать вам размер avg / min / max для записей в вашей базе данных и даже будет делать это на основе префикса.

14 голосов
/ 25 апреля 2018
Команда

MEMORY USAGE key дает вам количество байтов, которое ключ и его значение требуется сохранить в оперативной памяти.

Заявленное использование - это общее количество выделенных памяти для данных и административных накладных расходов, которые ключ имеет.значение require (документация redis источника)

7 голосов
/ 04 октября 2011

Возможно, вам будет полезно сэмплировать ключи Redis и сгруппировать их по типу.Сальваторе написал инструмент под названием redis-sampler , который выдает около 10000 RANDOMKEY команд, за которыми следует TYPE для извлеченных ключей.За считанные секунды или минуты вы получите довольно точное представление о распределении типов ключей.

Я написал расширение (к сожалению, нигде с открытым исходным кодом, потому что оно связано с работой), которое добавляетнебольшой анализ имен ключей с помощью регулярных выражений, которые дают вам представление о том, какие типы ключей приложения (в зависимости от используемой структуры именования) хранятся в Redis.В сочетании с более общим выводом redis-sampler это должно дать вам чрезвычайно хорошее представление о том, что происходит.

3 голосов
/ 04 октября 2011

Возможно, вы можете сделать некоторый самоанализ в файле базы данных.Протокол относительно прост (но недостаточно хорошо документирован), поэтому вы можете написать для него анализатор, чтобы определить, какие отдельные ключи занимают много места.* Вы пытались использовать MONITOR, чтобы увидеть, что пишется, вживую?Возможно, вы найдете проблему с данными в движении.

2 голосов
/ 19 февраля 2016

Вы можете использовать .net приложение https://github.com/abhiyx/RedisSizeCalculator для расчета размера ключа redis,

Пожалуйста, не стесняйтесь оставить свой отзыв о том же

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...