Redis: Показати розмір / розмір бази даних для ключів


88

Здається, мій екземпляр redis стає дуже великим, і я хотів би дізнатись, яка з багатьох баз даних, які я маю там, займає скільки пам'яті. INFOКоманда Redis просто показує мені загальний розмір і кількість ключів для бази даних, що не дає мені великого розуміння ... Тож будь-які інструменти / ідеї, які дають мені більше інформації під час моніторингу сервера redis, будуть вдячні.

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

Відповіді:


113

Тож моє рішення моєї власної проблеми: погравшись redis-cliтрохи довше, я виявив, що DEBUG OBJECT <key>виявляється щось на зразок serializedlengthключа, що насправді було тим, що я шукав ...

Для цілої бази даних вам потрібно об’єднати всі значення, для KEYS *яких не повинно бути надто складно з вибраною мовою сценаріїв ...

Погано те, що redis.io насправді не має багато інформації про DEBUG OBJECT.


1
Чи є серіалізована довжина розміром всього об’єкта, у байтах?
рафіян

18
@BernhardVallant, дякую за відповідь. Я продовжив і написав короткий сценарій, який друкує всі клавіші та їх розміри у зручному для читання форматі. Думав, поділюсь. :) gist.github.com/epicserve/5699837
Брент О'Коннор,

13
Значення serializedlength не залежить від обсягу пам'яті! Це розмір, який будуть приймати об’єкти при збереженні у файлі RDB на диску. Перевірте вихідний код: github.com/antirez/redis/blob/… та github.com/antirez/redis/blob/…
Hugo Tavares

здається, немає способу отримати розмір ключа або значення або ключа-значення в пам’яті (не звантажений розмір на диск)
Авнер Барр,

4
FYI: не намагайтеся що - небудь з DEBUG на AWS ElastiCache Redis, docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide / ... . Навіть знайдений redis-cli --bigkeys зупиниться
sonjz

70

Рішення з коментарів заслуговує на власну відповідь:

redis-cli --bigkeys

1
великі ключі - це розмір ключа , а не розмір збереженого значення .. Таким чином, ви можете мати ключ aіз значенням 4 Гб, але це не відображатиметься у bigkeys. (це відбувається gist.github.com/michael-grunder/9257326 та docs.redislabs.com/latest/ri/memory-optimizations/… )
EoghanM

40

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

Повідомлене використання - це загальна кількість виділеної пам’яті для даних та адміністративних накладних витрат, які потрібні ключу для його значення (джерело документації redis)


12
це може бути використана лише версія> 4.0
teik

15

Погляньте на цей проект, він видає цікаву статистику про простори клавіш на основі регулярних виразів та префіксів. Він використовує DEBUG OBJECTкоманду і сканує db, визначаючи групи клавіш та оцінюючи відсоток місця, який вони займають.

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 в автономному режимі. Це також добре працює. Це може дати вам середній / мінімальний / максимальний розмір записів у вашій базі даних, і навіть буде робити це на основі префікса.


8

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

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


7
Так, насправді мені допомогло більше, ніжredis-cli --bigkeys
нмат

4

Можливо, ви можете провести самоаналіз у файлі db. Протокол відносно простий (але ще недостатньо добре задокументований), тому ви можете написати для нього парсер, щоб визначити, які окремі клавіші займають багато місця.


Нові пропозиції:

Ви пробували використовувати, MONITORщоб побачити, що пишеться, у прямому ефірі? Можливо, ви можете знайти проблему з даними в русі.


Здається цікавим, але тим не менше я намагаюся знайти простий спосіб контролювати споживання пам’яті redis на сервері ... Вивчення дампа мені здається більш практичним для налагодження, не кажучи вже про те, що дампа кілька концерти зараз!
Бернхард Валлант,

Вам слід запитати список розсилки redis. Мені справді цікаво почути "найкращу" відповідь на це.
Дональд Майнер

Ну, я вже спробував INFOі MONITOR, але, може, головна проблема полягає в тому, що коли не дивишся,
редіс стає

Гаразд, я опублікував його у своєму списку розсилки, але відповідь знайшов і сам ... Дивіться нижче!
Бернхард Валлант,

повторно самоаналіз файлу db - я написав сценарій для синтаксичного аналізу файлів dump.rdb і вивів файл CSV, що повідомляє про приблизну пам'ять, що використовується кожною клавішею. Дивіться github.com/sripathikrishnan/redis-rdb-tools
Sripathi Krishnan


1

Зазвичай я віддаю перевагу методу вибірки ключів для усунення таких сценаріїв.

redis-cli -p 6379 -n db_number --bigkeys

Наприклад: -

redis-cli -p 6370 -n 0 --bigkeys


Чому це метод "вибірки ключів"? Я вважаю це дуже обмеженим, оскільки він показує лише вершину айсберга.
MrR

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.