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.