Подтвердить что ты не робот

Каков самый простой способ найти самые большие объекты в Redis?

У меня есть свалка 20 ГБ + rdb. Я подозреваю, что существует определенный набор ключей, раздувающих его. Я хотел бы иметь возможность всегда определять первые 100 самых больших объектов из статического дамп-анализа или задавать его самому серверу, который, кстати, имеет ove 7M-объекты.

Инструменты анализа дампа, такие как rdbtools, не помогают в этом (я думаю) действительно распространенном случае использования.

Я подумывал написать script и перебрать весь набор клавиш с помощью "объекта отладки redis-cli", но у меня есть ощущение, что должен быть какой-то инструмент, который мне не хватает.

4b9b3361

Ответ 1

Добавлена ​​опция redis-cli: redis-cli --bigkeys

Пример вывода на основе 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)

Ответ 2

redis-rdb-tools имеет отчет о памяти, который делает именно то, что вам нужно. Он генерирует CSV файл с памятью, используемой каждым ключом. Затем вы можете отсортировать его и найти клавиши Top x.

Существует также экспериментальный профилировщик памяти, который начал делать то, что вам нужно. Он еще не завершен, и поэтому не документирован. Но вы можете попробовать - https://github.com/sripathikrishnan/redis-rdb-tools/tree/master/rdbtools/cli. И, конечно же, я бы посоветовал вам также внести свой вклад!

Ответ 3

Я новичок в bash скриптах. Я вышел с этим:

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

Этот script

  • Перечисляет все ключи с помощью redis-cli keys "*"
  • Получает размер с помощью redis-cli DEBUG OBJECT
  • сортирует script на основе имени preend с размером

Это может быть очень медленным из-за того, что bash перебирает каждый один ключ redis. У вас есть ключи 7 м, которые вам могут понадобиться для кэширования вывода ключей в файл.

Ответ 4

Если у вас есть ключи, которые следуют этому шаблону "A: B" или "A: B: *", я написал инструмент, который анализирует как существующий контент, так и мониторы для таких вещей, как скорость попадания, количество получателей/наборов, сетевой трафик, время жизни и т.д. Результат аналогичен приведенному ниже.

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 |

Ответ 5

Попробуйте redis-memory-analyzer - консольный инструмент для сканирования пространства клавиш Redis в режиме реального времени и статистики использования совокупной памяти по ключевым шаблонам. Вы можете использовать эти инструменты без обслуживания на производственных серверах. Он показывает подробную информацию о каждом ключевом шаблоне в вашей службе Redis.

Также вы можете сканировать Redis db всеми или выбранными типами Redis, такими как "string", "hash", "list", "set", "zset". Также поддерживается шаблон соответствия.

RMA также пытается различать имена ключей по шаблонам, например, если у вас есть такие ключи, как "пользователь: 100" и "пользователь: 101", приложение выберет общий шаблон "user: *" на выходе, чтобы вы могли анализировать большую часть памяти проблемных данных в вашем экземпляре.