Redis: कुंजी के लिए डेटाबेस का आकार / आकार दिखाएं


88

मेरा रेडिस उदाहरण बहुत बड़ा हो रहा है और मुझे यह पता लगाना है कि मेरे पास वहां मौजूद कई डेटाबेस में से कितनी मेमोरी है। Redis ' INFOकमांड मुझे केवल कुल आकार और प्रति डेटाबेस कुंजियों की संख्या दिखाती है, जो मुझे अधिक जानकारी नहीं देती है ... इसलिए कोई भी उपकरण / विचार जो मुझे अधिक जानकारी देते हैं, जब रेडिस सर्वर की निगरानी की सराहना की जाएगी।

Redis दस्तावेज़ीकरण मुझे कोई भी आदेश नहीं दिखाता है जो कुछ निश्चित कुंजियों की खपत की गई मेमोरी को वापस कर सकता है, इसलिए मुझे लगता है कि अगर कोई छोटी गाड़ी कोड को लाल करने के लिए बहुत "कचरा" लिखेगा तो यह वास्तव में मुश्किल हो सकता है ...

जवाबों:


113

तो मेरी अपनी समस्या का हल: redis-cliथोड़ी देर साथ खेलने के बाद मुझे पता चला कि कुंजी की DEBUG OBJECT <key>तरह कुछ पता चलता है serializedlength, जो वास्तव में कुछ ऐसा था जिसकी मुझे तलाश थी ...

एक पूरे डेटाबेस के लिए आपको उन सभी मूल्यों को संयोजित करने की आवश्यकता है KEYS *जिनके लिए अपनी पसंद की स्क्रिप्टिंग भाषा के साथ बहुत मुश्किल नहीं होना चाहिए ...

बुरी बात यह है कि redis.io के पास वास्तव में बहुत सारी जानकारी नहीं है DEBUG OBJECT


1
क्या क्रमबद्ध लंबाई बाइट्स में पूरी वस्तु का आकार है?
राफियन

18
@BernhardVallant, उत्तर के लिए धन्यवाद। मैंने आगे बढ़कर एक त्वरित स्क्रिप्ट लिखी, जो एक मानव पठनीय प्रारूप में सभी कुंजियों और उनके आकारों को प्रिंट करती है। सोचा था कि साझा करूंगा। :) gist.github.com/epicserve/5699837
ब्रेंट ओ'कॉनर

13
क्रमबद्ध आकार का मान स्मृति आकार के बारे में नहीं है! डिस्क पर RDB फ़ाइल में सहेजने पर एक ऑब्जेक्ट आकार लेगा। स्रोत कोड की जाँच करें: github.com/antirez/redis/blob/… और github.com/antirez/redis/blob/…
ह्यूगो तवरेज

स्मृति में कुंजी या मान या कुंजी-मान का आकार प्राप्त करने का कोई तरीका प्रतीत नहीं होता (डिस्क पर डंप नहीं किया गया आकार)
Avner Barr

4
FYI करें: AWS ElastiCache Redis, docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/… पर DEBUG के साथ कुछ भी करने की कोशिश न करें । यहां तक ​​कि रेडिस-क्ली
बिबकिक्स

70

टिप्पणियों से समाधान खुद के जवाब के हकदार हैं:

redis-cli --bigkeys

1
बड़ा चाबियों का आकार के बारे में है कुंजी .., नहीं संग्रहीत मूल्य के आकार, ताकि आप की एक प्रमुख हो सकता है aएक 4GB मूल्य के साथ, लेकिन यह ऊपर bigkeys में नहीं दिखाई देगा। (यह gist.github.com/michael-grunder/9257326 और docs.redislabs.com/latest/ri/memory-optimifications/… ) द्वारा चल रहा है
EoghanM

40

MEMORY USAGE key कमांड आपको बाइट्स की संख्या देता है जो एक कुंजी और उसके मूल्य को रैम में संग्रहीत करने की आवश्यकता होती है।

रिपोर्ट किया गया उपयोग डेटा और प्रशासनिक ओवरहेड्स के लिए स्मृति आवंटन का कुल है जो इसके मूल्य की आवश्यकता होती है (स्रोत रेडिस प्रलेखन)


12
इसका उपयोग केवल संस्करण> 4.0
टेक

15

इस परियोजना पर एक नज़र डालें यह regexs और उपसर्गों के आधार पर keyspaces के बारे में कुछ दिलचस्प आँकड़े आउटपुट करता है। यह 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 जो एक डंप .rdb फ़ाइल ऑफ़लाइन का विश्लेषण करके संपूर्ण कीस्पेस पर एक पूर्ण विश्लेषण करता है। यह एक अच्छी तरह से भी काम करता है। यह आपको आपके db में प्रविष्टियों के लिए औसत / मिनट / अधिकतम आकार दे सकता है, और यहां तक ​​कि यह उपसर्ग के आधार पर भी करेगा।


8

रेडिस कीज़ को सैंपल करने और उन्हें टाइप करके समूह में लाने के लिए आपको बहुत उपयोगी लग सकता है। साल्वाटोर ने रेडिस-सैंपलर नामक एक उपकरण लिखा है जो लगभग 10000 RANDOMKEYआदेशों को फिर से जारी की गई TYPEचाबियों के बारे में बताता है । सेकंड, या मिनट के मामले में, आपको कुंजी प्रकारों के वितरण के बारे में एक सटीक दृष्टिकोण प्राप्त करना चाहिए।

मैंने एक एक्सटेंशन लिखा है (दुर्भाग्य से कहीं भी ओपन-सोर्स नहीं है क्योंकि यह काम से संबंधित है), जो कि regexs के माध्यम से प्रमुख नामों का थोड़ा सा आत्मनिरीक्षण जोड़ता है जो आपको यह अनुमान लगाते हैं कि आपको किस प्रकार के एप्लिकेशन कीज़ (जो भी नामकरण संरचना के अनुसार हो) का उपयोग कर), रेडिस में संग्रहीत हैं। रेडिस-सैंपलर के अधिक सामान्य आउटपुट के साथ संयुक्त, यह आपको एक बहुत अच्छा विचार देना चाहिए कि क्या हो रहा है।


7
Tks, वास्तव redis-cli --bigkeys
nmat

4

शायद आप db फ़ाइल पर कुछ आत्मनिरीक्षण कर सकते हैं। प्रोटोकॉल अपेक्षाकृत सरल है (अभी तक अच्छी तरह से प्रलेखित नहीं है), इसलिए आप यह निर्धारित करने के लिए एक पार्सर लिख सकते हैं कि कौन सी व्यक्तिगत कुंजी बहुत अधिक स्थान ले रही है।


नए सुझाव:

क्या आपने MONITORयह देखने की कोशिश की है कि क्या लिखा जा रहा है, लाइव? शायद आप गति में डेटा के साथ समस्या पा सकते हैं।


दिलचस्प लगता है, लेकिन फिर भी मैं सर्वर पर रेडिस की मेमोरी खपत की निगरानी करने का एक आसान तरीका खोजने की कोशिश कर रहा हूं ... डंप की जांच मेरे लिए डिबगिंग के लिए अधिक व्यावहारिक लगती है, यह भी उल्लेख नहीं है कि डंप कुछ ही है अब जिग्स!
बर्नहार्ड वालेंट

आपको रेडिस मेलिंग सूची पूछनी चाहिए। मैं इसके लिए "सर्वश्रेष्ठ" उत्तर सुनने में वास्तव में दिलचस्प हूं।
डोनाल्ड माइनर

अच्छी तरह से पहले से ही कोशिश की है INFOऔर MONITOR, लेकिन मुख्य समस्या यह हो सकती है, कि जब लाल नहीं देख वास्तव में बड़ा हो गया ...
बर्नहार्ड

ठीक है, मैंने इसे उनकी मेलिंग सूची में पोस्ट किया, लेकिन मुझे खुद भी एक उत्तर मिला ... नीचे देखें!
बर्नहार्ड वलंट

कर रहे हैं। db फाइल पर आत्मनिरीक्षण - मैंने डंप.डर्ब फाइल को पार्स करने के लिए एक स्क्रिप्ट लिखी और प्रत्येक कुंजी द्वारा प्रयुक्त अनुमानित मेमोरी की रिपोर्ट करने वाली एक सीएसवी फाइल को आउटपुट किया। देखें github.com/sripathikrishnan/redis-rdb-tools
श्रीपति कृष्णन

2

आप उपयोग कर सकते हैं .net अनुप्रयोग https://github.com/abhiyx/RedisSizeCalculator , लाल रंग की कुंजी के आकार की गणना करने के लिए,

कृपया अपनी प्रतिक्रिया देने के लिए स्वतंत्र महसूस करें


1

मैं आमतौर पर इस तरह के परिदृश्य का निवारण करने के लिए प्रमुख नमूना विधि पसंद करता हूं।

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

उदाहरण के लिए: -

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


यह "प्रमुख नमूनाकरण" विधि क्यों है? मुझे यह बहुत सीमित लगता है क्योंकि यह केवल हिमशैल के टिप को दिखाता है।
MrR

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.