Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

Redis में मेमोरी उपयोग का विश्लेषण और अनुकूलन कैसे करें

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

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

अत्यधिक मेमोरी उपयोग के साथ समस्याओं का निदान करने के लिए, हमें स्पष्ट रूप से यह पता लगाने का एक तरीका चाहिए कि कौन सी कुंजी सबसे अधिक मेमोरी का उपयोग कर रही है ताकि हम इस बारे में तर्क करना और समझ सकें कि एप्लिकेशन के कौन से व्यवहार समस्या का कारण बन रहे हैं। याद रखें, समयपूर्व अनुकूलन सभी बुराइयों की जड़ है, और रेडिस कोई अपवाद नहीं है। समस्या कहां है और हम इसे कैसे ठीक कर सकते हैं, इसके बारे में सोचने के लिए हमें अपने डेटासेट की मेमोरी विशेषताओं में दृश्यता की आवश्यकता है। नीचे, हम अपने रेडिस डेटा को देखने के लिए उपलब्ध विकल्पों में से कुछ का पता लगाते हैं और उन क्षेत्रों को ढूंढते हैं जो एप्लिकेशन स्तर पर अनुकूलन से लाभान्वित हो सकते हैं।

मेमोरी यूसेज कमांड

यह उपयुक्त नामित कमांड रेडिस 4.0.0 के बाद से उपलब्ध है और रेडिस के साथ स्मृति समस्याओं को डीबग करने का पहला कदम है। डॉक्स से:

<ब्लॉकक्वॉट>

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

यहां एक उदाहरण दिया गया है:

MEMORY USAGE users_by_reputation
(integer) 2923419

कुंजी, मान और आंतरिक ओवरहेड्स को संग्रहीत करने के लिए उपयोग किए जाने वाले बाइट्स की संख्या का प्रतिनिधित्व करने वाला एक साधारण पूर्णांक वापस कर दिया जाता है। किसी विशेष कुंजी के मेमोरी उपयोग को शीघ्रता से खोजने के लिए, यह इससे आसान नहीं है।

दो संभावित विपक्ष हैं:

  1. यह आदेश केवल Redis 4.0.0 और बाद के संस्करण में उपलब्ध है। इसमें अधिकांश क्लाउड प्रदाता शामिल नहीं हैं।
  2. यह आपको केवल एक कुंजी द्वारा उपयोग की गई मेमोरी बताता है, इसलिए जब तक आप पहले से नहीं जानते कि कौन सी कुंजी या कुंजी समस्या पैदा कर रही है, इस कमांड की बहुत सीमित उपयोगिता है।

redis-rdb-tools

redis-rdb-tools एक छोटा कमांड-लाइन टूल है जो विनम्र MEMORY USAGE से आगे जाता है आदेश हमने ऊपर चर्चा की। यह एक लोकप्रिय और शक्तिशाली मेमोरी प्रोफाइलिंग टूल है जो विशेष रूप से रेडिस के लिए बनाया गया है जो एक रेडिस डंप (.rdb) फ़ाइल को पार्स करता है और डंप में प्रत्येक कुंजी के लिए एक विस्तृत मेमोरी प्रोफाइल बनाता है, जिसमें उपयोग की गई मेमोरी, डेटा प्रकार, तत्वों की संख्या जैसे विवरण शामिल हैं। आदि। यह आपको संसाधित की गई कुंजियों को फ़िल्टर करने की भी अनुमति देता है, ताकि आप वैकल्पिक रूप से किसी विशेष कुंजी या किसी विशेष पैटर्न से मेल खाने वाली कुंजियों के सबसेट पर विश्लेषण चला सकें। विश्लेषण का आउटपुट एक CSV फ़ाइल है जिसमें कुंजी, उपयोग की गई मेमोरी, डेटा प्रकार, तत्वों की संख्या आदि के लिए कॉलम होते हैं।

यह उपकरण बहुत अच्छा है, क्योंकि MEMORY USAGE . के विपरीत कमांड, जो केवल एक कुंजी पर काम करता है, यह टूल पूरे डेटासेट का विश्लेषण करता है और परिणाम को सीएसवी प्रारूप में थूकता है, जिसका अर्थ है कि आप इसे किसी भी SQL डेटाबेस में लोड कर सकते हैं और अपनी पसंद के अनुसार जो भी प्रश्न कर सकते हैं, उसे सॉर्ट कर सकते हैं और इसे अपनी इच्छानुसार फ़िल्टर कर सकते हैं। , SQL की पूरी शक्ति के साथ, जो आपको अपने डेटा की मेमोरी लागत के बारे में बहुत अच्छी जानकारी देता है। एक बोनस के रूप में, यदि आप 4.0.0 से पहले के रेडिस संस्करणों का उपयोग कर रहे हैं, तो भी आप चाहें तो सिंगल कीज़ का विश्लेषण करने के लिए इस टूल का उपयोग कर सकते हैं, क्योंकि यह टूल रेडिस द्वारा उत्पन्न बाइनरी डंप को पार्स करने के बजाय रेडिस पर निर्भर होने के बजाय काम करता है। स्मृति उपयोग की रिपोर्ट करें। दूसरी तरफ, दृष्टिकोण में इस अंतर का मतलब यह है कि परिकलित स्मृति उपयोग एक सटीक आंकड़े की तुलना में एक अनुमान से अधिक है, जैसा कि परियोजना के प्रलेखन में उल्लेख किया गया है। हालांकि, यह वास्तव में कोई समस्या नहीं है जब हमारा लक्ष्य स्मृति उपयोग की समस्याओं की पहचान करना है, क्योंकि हम चाबियों के सापेक्ष आकार और उन कुंजियों की पहचान करने में अधिक रुचि रखते हैं जो काफी अधिक स्मृति का उपयोग करते हैं, इसलिए यहां या वहां कुछ बाइट्स वास्तव में अप्रासंगिक है।

RDBTools

RDBTools एक वेब-आधारित टूल है, जो रेडिस को प्रबंधित और अनुकूलित करने के लिए कई टूल प्रदान करता है, जिसमें मेमोरी ऑप्टिमाइज़ेशन पर मुख्य ध्यान दिया जाता है। यह ऊपर चर्चा किए गए ओपन सोर्स रेडिस-आरडीबी-टूल्स प्रोजेक्ट से पैदा हुआ था। इसके साथ हम आसानी से हमारे उदाहरण को इंगित करके और "विश्लेषण" पर क्लिक करके हमारे रेडिस सर्वर के मेमोरी उपयोग का विश्लेषण कर सकते हैं। टूल रनिंग इंस्टेंस से डंप डाउनलोड करता है और इसका विश्लेषण करता है, आपको कमांड लाइन के समान मेमोरी उपयोग, डेटा प्रकार, एन्कोडिंग, तत्वों की संख्या आदि जैसे विभिन्न मापदंडों के आधार पर आपकी कुंजियों को फ़िल्टर करने और सॉर्ट करने के लिए एक स्लीक UI के साथ प्रस्तुत करता है। उपकरण, लेकिन डंप लेने, मेमोरी प्रोफाइल बनाने, डेटाबेस स्थापित करने, प्रोफ़ाइल आयात करने, प्रश्नों को लिखने और चलाने आदि में शामिल किसी भी मैनुअल प्रयास के बिना।

इसके अलावा, RDBTools मेमोरी प्रोफाइल से कई चार्ट और ग्राफ़ भी उत्पन्न करता है, जिससे आप अपने डेटा में और भी अधिक अंतर्दृष्टि प्राप्त कर सकते हैं, साथ ही उद्योग मानकों और रेडिस को अनुकूलित करने के वर्षों के अनुभव के आधार पर, अपने रेडिस सर्वर के कॉन्फ़िगरेशन को अनुकूलित करने के लिए सिफारिशों के साथ, निचोड़ने के लिए और भी अधिक स्मृति बचत। मेमोरी ऑप्टिमाइजेशन के अलावा, रेडिस का उपयोग करने वाले किसी भी व्यक्ति के लिए उपयोगी कई अन्य सुविधाएं हैं, जैसे एक अंतर्निहित समृद्ध सीएलआई, इनलाइन दस्तावेज़ीकरण के साथ कॉन्फ़िगरेशन संपादक, समृद्ध लाइव डेटा विज़ुअलाइज़र इत्यादि।

RDBTools एक डॉक इमेज के रूप में उपलब्ध है, जो डॉक हब में उपलब्ध है, और इसे आपकी अपनी मशीन पर चलाया जा सकता है, इसलिए संवेदनशील डेटा के लीक होने के बारे में चिंता करने की कोई आवश्यकता नहीं है। कुछ उपयोग सीमाओं के साथ, एक परीक्षण संस्करण हमेशा के लिए निःशुल्क उपलब्ध है। उपलब्ध विभिन्न भुगतान योजनाओं के बारे में अधिक जानकारी के लिए मूल्य निर्धारण पृष्ठ देखें।

निष्कर्ष

रेडिस जैसे इन-मेमोरी डेटाबेस का उपयोग करते समय मेमोरी से बाहर निकलना एक अपरिहार्य समस्या है। सभी अनुकूलन समस्याओं की तरह, पहला कदम समस्या का सही निदान करना है। असत्यापित परिकल्पनाओं के आधार पर जल्दी से निष्कर्ष पर पहुंचने के प्रलोभन का विरोध करना महत्वपूर्ण है। जब अनुकूलन की बात आती है तो "माप, माप, माप" खेल का नाम है, और आपकी रेडिस मेमोरी समस्याओं में अंतर्दृष्टि प्राप्त करने के लिए विभिन्न विधियां और उपकरण हैं। कौन सा सबसे अच्छा है यह आपकी विशिष्ट आवश्यकताओं पर निर्भर करता है और आप विकास प्रक्रिया में कहां हैं। रेडिस का उपयोग शुरू करने वाले किसी व्यक्ति के लिए, व्यक्तिगत कुंजियों पर नज़र रखना शुरू करने के लिए पर्याप्त हो सकता है, जबकि रेडिस के भारी उपयोगकर्ताओं के लिए, बाद में दर्द से बचाने के लिए सभी घंटियों और सीटी के साथ एक समर्पित जीयूआई उपकरण के लिए जाना निश्चित रूप से समझ में आता है। आपकी पसंद जो भी हो, इसे हल करने का प्रयास करने से पहले हमेशा अपनी समस्या की जड़ को समझना सुनिश्चित करें, और याद रखें, यदि आपको रेडिस के साथ मेमोरी की समस्या हो रही है, तो संभवतः आप वास्तव में आवश्यकता से अधिक मेमोरी का उपयोग कर रहे हैं।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. blpop थोड़ी देर के बाद कतार को संसाधित करना बंद कर देता है

  2. स्प्रिंग बूट + रेडिस - एक अजीब कुंजी उत्पन्न करना

  3. मुझे कितनी बार अपना Booksleeve कनेक्शन खोलना/बंद करना चाहिए?

  4. रेडिस आरडीबी और एओएफ को कैसे निष्क्रिय करें?

  5. एक ही हैश कुंजी पर पढ़ने/डेल करने वाले कई समवर्ती कार्यक्रमों के साथ रेडिस व्यवहार