RethinkDB 2.3 - Current issues

सिस्टम वर्तमान अंक तालिका




rethinkdb

सिस्टम वर्तमान अंक तालिका

वर्तमान समस्या तालिका RethinkDB के संस्करण 1.16 में जोड़े गए सिस्टम तालिकाओं में से एक है। इसे क्वेरी करने से क्लस्टर के भीतर समस्याओं का पता चलता है; सामान्य, त्रुटि रहित संचालन में, यह खाली रहेगा। तालिका केवल पढ़ने के लिए है।

इस तालिका को बिना किसी फ़िल्टर के क्वेरी करने से क्लस्टर के भीतर सभी वर्तमान समस्याओं की एक सूची बन जाती है।

नोट: अन्य सिस्टम टेबलों की तरह, current_issues टेबल को केवल admin यूजर अकाउंट द्वारा ही एक्सेस किया जा सकता है।

r.db("rethinkdb").table("current_issues").run(conn, callback);

दस्तावेज़ स्कीमा

तालिका में जोड़े गए मुद्दे समान संरचना का पालन करते हैं।

{
    id: "<uuid>",
    type: "<type>",
    critical: <bool>,
    info: {
        <type-specific fields>
    },
    description: "<type-specific string>"
}
  • id : प्राथमिक कुंजी; यह पूरे मामले के जीवनकाल में अपरिवर्तित रहता है।
  • type : इश्यू प्रकार को इंगित करने वाली एक छोटी स्ट्रिंग। (इस दस्तावेज़ के बाकी प्रकारों के बारे में अधिक विस्तार से जाना जाता है।)
  • critical : यदि उपलब्धता की हानि होने की संभावना true तो true है।
  • info : विस्तार क्षेत्र; कुंजियाँ और मान समस्या प्रकार पर निर्भर करेंगे।
  • description : समस्या का मानव-पठनीय विवरण, जिसमें इसे हल करने के लिए सुझाव भी शामिल हैं।

आप type फ़ील्ड पर फ़िल्टर करके विशिष्ट प्रकार के मुद्दों के लिए क्वेरी कर सकते हैं।

r.db("rethinkdb").table("current_issues").filter({type: "outdated_index"}).run(conn, callback);

मुद्दे के प्रकार

ध्यान दें कि यदि आप uuid लिए identifier_format सेट के साथ table कॉल करते हैं, तो info उपखंड में सर्वर, टेबल और डेटाबेस के संदर्भ नामों के बजाय यूयूआईडी होंगे।

लॉग मुद्दों लिखें

type: "log_write_error"
critical: false
info: {
    servers: ["server_a", "server_b", ...],
    message: "<error message>"
}

RethinkDB अपनी लॉग फ़ाइल (या stdout/stderr ) में लिखने में विफल रहा है। message स्ट्रिंग वह त्रुटि होगी जो असफल लेखन पर ऑपरेटिंग सिस्टम से रिथिंकडीबी को प्राप्त हुई थी; servers प्रभावित सर्वरों की एक सूची होगी।

सर्वर को लॉग से लिखने से रोकने वाली समस्या को ढूंढें और हल करें (उदाहरण के लिए, डिस्क स्थान खाली हो तो डिस्क पूर्ण)। प्राप्त प्रति अद्वितीय त्रुटि संदेश में केवल एक समस्या होगी - यदि एकाधिक सर्वर एक ही त्रुटि का सामना करते हैं, तो केवल एक अंक तालिका में दिखाई देगा।

टकराव के मुद्दों का नाम

type: "server_name_collision" | "db_name_collision" | "table_name_collision"
critical: true
info: {
    name: "<name in conflict>",
    ids: ["<uuid1>", "<uuid2>", ...],
    db: "<name>"
}

( db फ़ील्ड अनुपस्थित रहेगी जब तक कि table_name_collision ।)

एक ही डेटाबेस में कई सर्वर, डेटाबेस या टेबल को एक ही नाम दिया गया है। name फ़ील्ड परस्पर विरोधी नाम दिखाता है; ids उन नाम वाली संस्थाओं के यूयूआईडी हैं। table_name_collision के मामले में, db वह डेटाबेस होगा जिसमें टेबल होती हैं। परस्पर विरोधी संस्थाओं का नाम बदलें।

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

संघर्ष में प्रति नाम एक मुद्दा होगा।

अनुक्रमणिका संबंधी समस्याएँ

type: "outdated_index"
critical: false
info: {
    tables: [
        {
            table: "foo",
            db: "bar",
            indexes: ["ix1", "ix2", ...]
        }
    ]
}

रेथिनबेक के पुराने संस्करण के साथ निर्मित अनुक्रमणिकाओं को फिर से बनाने की आवश्यकता है क्योंकि रीसेलिंग इंडेक्सिंग के तरीके में बदलाव के कारण। अनुक्रमणिका के पुनर्निर्माण के विवरण के लिए " मेरा द्वितीयक सूचकांक पुराना है " देखें।

यह समस्या केवल एक बार current_issues तालिका में दिखाई देगी - तालिकाओं और अनुक्रमणिकाओं के लिए info क्षेत्र की जाँच करें जो इसे प्रभावित करता है।

तालिका उपलब्धता मुद्दे

type: "table_availability"
critical: true | false
info: {
    table: "foo",
    db: "bar",
    shards: [
        {
            primary_replicas: ["replica1"],
            replicas: [
                { server: "replica1", state: "ready" },
                { server: "replica2", state: "disconnected" }
            ]
        }
    ],
    status: {
        all_replicas_ready: false,
        ready_for_writes: false,
        ready_for_reads: true,
        ready_for_outdated_reads: true
    }
}

क्लस्टर की एक तालिका कम से कम एक प्रतिकृति गायब है। description स्ट्रिंग तालिका में निभाई गई लापता सर्वर (रों) भूमिकाओं पर निर्भर करेगी। यदि तालिका पठन और / या लिखने के लिए उपलब्ध नहीं है, तो critical true होगी; यदि तालिका दोनों से पढ़ी और लिखी जा सकती है, तो यह false होगी।

यदि कोई तालिका पढ़ने और / या लिखने के लिए अनुपलब्ध है, लेकिन उसके सभी सर्वर अभी भी उपलब्ध हैं, तो कोई समस्या नहीं दिखाई जाएगी।

यह समस्या प्रत्येक तालिका के लिए अधिकतम एक बार दिखाई देगी।

मेमोरी उपलब्धता के मुद्दे

type: "memory_error"
critical: false
info: {
    servers: [ "server1" ],
    message: "Data from a process on this server has been placed into swap memory in the past hour. If the data is from RethinkDB, this may impact performance."
}

यह संदेश एक चेतावनी है कि एक RethinkDB सर्वर पर एक पृष्ठ गलती हुई है और स्वैप स्थान का उपयोग किया जा रहा है। लिनक्स के तहत, यह संदेश केवल तभी दिखाई देगा जब किसी RethinkDB प्रक्रिया ने स्मृति को पृष्ठांकित करना शुरू कर दिया हो; OS X के तहत, यह तब दिखाई देगा जब कोई भी प्रक्रिया पेजिंग कर रही हो। जब पेजिंग होती है, तो RethinkDB का Windows संस्करण पता नहीं लगा सकता है।

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

कनेक्टिविटी के मुद्दे

type: "non_transitive_error"
critical: false
info: {
    servers: [ "server1", "server2" ],
    message: "Server connectivity is non-transitive."
}

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

यह समस्या प्रत्येक सर्वर के लिए सबसे अधिक बार दिखाई देगी।