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

MongoDB डेटाबेस प्रोफाइलर का अवलोकन

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

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

MongoDB प्रोफाइलर को सक्षम/कॉन्फ़िगर करना

आम तौर पर, प्रोफाइलर सिस्टम में सभी डेटा संग्रहीत करता है। प्रोफाइल संग्रह जिसे किसी अन्य सामान्य मोंगोडीबी संग्रह की तरह पूछताछ की जा सकती है। प्रोफाइलर में 3 प्रोफाइलिंग स्तर हैं। किसी भी डेटाबेस के लिए डिफ़ॉल्ट रूप से प्रोफाइलर स्तर 0 पर सेट होता है।

स्तर 0 प्रोफाइलर कोई डेटा लॉग नहीं करेगा
स्तर 1 प्रोफाइलर केवल कुछ सीमा से ऊपर के धीमे संचालन को लॉग करेगा
स्तर 2 प्रोफाइलर सभी कार्यों को लॉग करेगा

प्रोफाइलर के बारे में कुछ जानकारी प्राप्त करने के लिए आप निम्न कमांड चला सकते हैं।

  • वर्तमान प्रोफाइलिंग स्तर प्राप्त करने के लिए।

    db.getProfilingLevel()
    आउटपुट:
    0
  • वर्तमान प्रोफाइलिंग स्थिति की जांच करने के लिए

    db.getProfilingStatus()
    आउटपुट:
    { "was" : 0, "slowms" : 100 }
  • प्रोफाइलिंग स्तर सेट करने के लिए

    db.setProfilingLevel(1, 40)
    आउटपुट:
    { "was" : 0, "slowms" : 100, "ok" : 1 }

    MongoDB पुराने प्रोफाइलिंग स्तर को प्रिंट करेगा और ओके लौटाएगा जिसका अर्थ है कि प्रोफाइलिंग स्तर अब 1 पर सेट है।

    प्रोफाइलर के लिए स्लोम्स एक थ्रेशोल्ड वैल्यू है, जिसका अर्थ है कि प्रोफाइलर उन सभी क्वेश्चन को लॉग करेगा, जिन्हें निष्पादित करने में थ्रेशोल्ड वैल्यू से अधिक समय लगता है।

प्रोफाइलर आउटपुट को समझना

system.profile संग्रह से 1 दस्तावेज़ प्राप्त करने के लिए इस आदेश को चलाएँ।

db.system.profile.find().limit(1).pretty()

आउटपुट:

{
    "op" : "query",
    "ns" : "mydb.Log",
    "query" : {
        "find" : "Log",
        "filter" : {
            "EMP_ID" : "01778"
        }
    },
    "keysExamined" : 0,
    "docsExamined" : 90022,
    "cursorExhausted" : true,
    "keyUpdates" : 0,
    "writeConflicts" : 0,
    "numYield" : 703,
    "locks" : {
        "Global" : {
            "acquireCount" : {
                "r" : NumberLong(1408)
            }
        },
        "Database" : {
            "acquireCount" : {
                "r" : NumberLong(704)
            }
        },
        "Collection" : {
            "acquireCount" : {
                "r" : NumberLong(704)
            }
        }
    },
    "nreturned" : 60,
    "responseLength" : 17676,
    "protocol" : "op_command",
    "millis" : 40,
    "execStats" : {
        "stage" : "COLLSCAN",
        "filter" : {
            "EMP_ID" : {
                "$eq" : "01778"
            }
        },
        "nReturned" : 60,
        "executionTimeMillisEstimate" : 30,
        "works" : 90024,
        "advanced" : 60,
        "needTime" : 89963,
        "needYield" : 0,
        "saveState" : 703,
        "restoreState" : 703,
        "isEOF" : 1,
        "invalidates" : 0,
        "direction" : "forward",
        "docsExamined" : 90022
    },
    "ts" : ISODate("2018-09-09T07:24:56.487Z"),
    "client" : "127.0.0.1",
    "allUsers" : [ ],
    "user" : ""
}

यह system.profile संग्रह से एक दस्तावेज़ है। हम देख सकते हैं कि इसमें हमारे लिए बहुत सारी उपयोगी जानकारी है। आइए इस दस्तावेज़ के कुछ उपयोगी क्षेत्रों को समझते हैं।

  • ऑप फ़ील्ड ऑपरेशन के प्रकार को संग्रहीत करता है।
  • एनएस फ़ील्ड लक्ष्य डेटाबेस और संग्रह नाम संग्रहीत करता है
  • क्वेरी फ़ील्ड क्वेरी और परिणाम के बारे में जानकारी संग्रहीत करता है। यदि दस्तावेज़ का आकार 50KB से अधिक है, तो परिणाम छोटा कर दिया जाएगा
  • keysExamined क्वेरी को निष्पादित करने के लिए DB द्वारा जांची गई अनुक्रमणिका कुंजियों की संख्या संग्रहीत करता है
  • docsExamed डीबी द्वारा जांचे गए दस्तावेजों की कुल संख्या को संग्रहीत करता है
  • क्वेरी द्वारा लौटाए गए दस्तावेज़ों की संख्या को वापस लौटाया जाता है
  • मिलिस में इस क्वेरी को निष्पादित करने में लिया गया वास्तविक समय मिलीसेकंड में होता है
  • Ts क्वेरी का टाइमस्टैम्प स्टोर करता है

हम इन क्षेत्रों की जांच करके और डेटाबेस के प्रदर्शन को अनुकूलित करने के लिए इसका उपयोग करके डेटाबेस सिस्टम द्वारा क्वेरी ऑपरेशन कैसे किया गया था, इसके बारे में बहुत सारी जानकारी प्राप्त कर सकते हैं। उदाहरण के लिए, यदि keyExamed value "nreturns" मान से अधिक है, तो यह दर्शाता है कि DB परिणाम प्राप्त करने के लिए कई अनुक्रमणिका स्कैन कर रहा है जो कभी भी एक अच्छा संकेत नहीं है। इसलिए आपको अपने डेटाबेस इंडेक्स को ठीक से एडजस्ट करना चाहिए।

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

प्रोफाइलर आउटपुट का विश्लेषण करने के लिए उपयोगी प्रश्न

  1. सबसे उपयोगी क्वेरी शीर्ष 10 धीमी क्वेरी प्राप्त करने के लिए सभी दस्तावेज़ों को मिली द्वारा क्रमबद्ध करना है।

    db.system.profile.find().sort({millis:-1}).limit(10).pretty();
  2. उन सभी प्रश्नों को खोजें जिन्हें निष्पादित करने में 30 मिलीसेकंड से अधिक समय लग रहा है

    db.system.profile.find({millis:{$gt:30}}).pretty()
  3. शीर्ष 10 सबसे धीमी एकत्रीकरण/कमांड क्वेरी खोजें

    db.system.profile.find({op: {$eq: “command” }}).sort({millis:-1}).limit(10).pretty();
  4. वे सभी ऑपरेशन खोजें जिनके लिए कुछ दस्तावेज़ स्थानांतरित किए गए थे

    db.system.profile.find({moved:true}).pretty()
  5. ऐसे प्रश्न खोजें जो डेटाबेस पर बड़े स्कैन कर रहे हों

    db.system.profile.find({docsExamined:{$gt:10000}}).pretty()
  6. एकत्रीकरण का उपयोग करके प्रत्येक प्रकार के संचालन द्वारा लिए गए अधिकतम और औसत समय का पता लगाएं

    db.system.profile.aggregate(
    { $group : { 
       _id :"$op", 
       count:{$sum:1},
       "max_time":{$max:"$millis"},
       "avg_time":{$avg:"$millis"}
    }}).pretty()
  7. एकत्रीकरण का उपयोग करके प्रत्येक डेटाबेस में क्वेरी द्वारा लिए गए अधिकतम और औसत समय का पता लगाएं

    db.system.profile.aggregate(
    { $group : {
      _id :"$ns",
      count:{$sum:1}, 
      "max_time":{$max:"$millis"}, 
      "avg_time":{$avg:"$millis"}  
    }}.pretty()

निष्कर्ष

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडीबी $कन्वर्ट

  2. Mongoose/node.js कैसे खोजें, पॉप्युलेट करें, सामान करें, 'डिपॉप्युलेट' करें और अपडेट करें

  3. एडब्ल्यूएस लैम्ब्डा पर MongoDB कनेक्शन पूलिंग का उपयोग कैसे करें?

  4. MongoDB प्रतिकृति मध्यस्थों के साथ सेट करता है

  5. टर्मिनल पर रूट पासवर्ड के बिना MySQL से कैसे कनेक्ट करें