एक MySQL होस्टिंग प्रतिकृति सेटअप में, पैरामीटर सेकंड्स_बिहाइंड_मास्टर (एसबीएम), जैसा कि SHOW SLAVE STATUS कमांड द्वारा प्रदर्शित किया जाता है, आमतौर पर दास के वर्तमान प्रतिकृति अंतराल के संकेत के रूप में उपयोग किया जाता है। . इस ब्लॉग पोस्ट में, हम जांच करते हैं कि विभिन्न स्थितियों में इस मूल्य को कैसे समझा और व्याख्या किया जाए।
मास्टर के पीछे सेकंड के संभावित मान
SBM का मान, जैसा कि MySQL दस्तावेज़ में बताया गया है, सामान्य रूप से MySQL स्लेव की स्थिति और विशेष रूप से MySQL स्लेव SQL_THREAD और IO_THREAD की स्थिति पर निर्भर करता है। जबकि IO_THREAD मास्टर से जुड़ता है और अपडेट पढ़ता है, SQL_THREAD इन अपडेट को स्लेव पर लागू करता है। आइए MySQL स्लेव के विभिन्न राज्यों के दौरान SBM के संभावित मूल्यों की जाँच करें।
जब SBM मान शून्य हो
- SBM हमेशा NULL होता है यदि आपका स्लेव बंद हो जाता है, या आपका SQL थ्रेड रुक जाता है (या नहीं चल रहा है)।
- यदि IO थ्रेड को रोक दिया जाता है, तो SBM भी NULL होगा, बशर्ते SQL थ्रेड पहले ही रिले लॉग से सभी ईवेंट संसाधित कर चुका हो। SHOW SLAVE STATUS का एक नमूना आउटपुट (केवल रुचि के मान दिखाने के लिए ट्रिम किया गया) यह दर्शाता है:
Slave_IO_State:
Master_Host:172.19.0.13
Slave_IO_Running:नहीं
Slave_SQL_Running:Yes
Seconds_Behind_Master:NULL
Master_UUID:23b326b1-a452-11e8-91ca-000d3a065e8e
Slave_SQL_Running_State:स्लेव ने सभी रिले लॉग पढ़ लिए हैं; अधिक अपडेट की प्रतीक्षा में
Retrieved_Gtid_Set:23b326b1-a452-11e8-91ca-000d3a065e8e:818-389213
Executed_Gtid_Set:23b326b1-a452-11e8-91ca-000d3a065e8e:1-389213
जब SBM मान शून्य या धनात्मक हो
- SBM एक मान्य मान (>=0) दिखाएगा जब SQL थ्रेड सक्रिय रूप से ईवेंट संसाधित कर रहा हो। IO थ्रेड स्थिति पर ध्यान दिए बिना यह सच है। उदाहरण के लिए:
Slave_IO_State:
Master_Host:172.19.0.13
Slave_IO_Running:नहीं
Slave_SQL_Running:Yes
Seconds_Behind_Master:3399
Master_UUID:23b326b1-a452-11e8-91ca-000d3a065e8e
Slave_SQL_Running_State:दास श्रमिकों की कतारों को संसाधित करने की प्रतीक्षा कर रहा है
Retrieved_Gtid_Set:23b326b1-a452-11e8-91ca-000d3a065e8e:818-389213
Executed_Gtid_Set:23b326b1-a452-11e8-91ca-000d3a065e8e:1-118774
उपरोक्त उदाहरण में, हम देख सकते हैं कि Retrieved_GTID_Set और Executed_GTID_Set की तुलना करके दास मास्टर के पीछे है। ऐसे मामलों में, सेकंड्स_बिहाइंड_मास्टर SQL थ्रेड द्वारा संसाधित नवीनतम लेनदेन के टाइमस्टैम्प और उसी लेनदेन के टाइमस्टैम्प के बीच अंतर का प्रतिनिधित्व करेगा जब इसे मास्टर पर संसाधित किया गया था। मास्टर का यह लेन-देन टाइमस्टैम्प प्रतिकृति के माध्यम से संरक्षित है और इसलिए दास स्थानीय रूप से एसबीएम की गणना करने में सक्षम होगा।
साथ ही, एक बार जब दास पूरी तरह से सभी रिले लॉग को पकड़ लेता है, (अर्थात निष्पादित GTID 23b326b1-a452-11e8-91ca-000d3a065e8e:1-389213/) हो जाता है, Seconds_Behind_Master यदि IO थ्रेड चल रहा है, तो '0' पर जाएँ, या IO थ्रेड नहीं चलने पर 'NULL' पर जाएँ।
#MySQL ट्यूटोरियल - मास्टर वैल्यू के पीछे के सेकंड्स को समझना ट्वीट करने के लिए क्लिक करें
MySQL स्लेव की निष्पादन गति को समझना
यह मानते हुए कि स्लेव पर SQL थ्रेड और IO थ्रेड चालू स्थिति में हैं, SBM मान की निगरानी करके मास्टर और स्लेव की सापेक्ष निष्पादन गति को समझना संभव है। एक सुसंगत '0' मान या एक स्थिर मान इंगित करता है कि दास उसी गति से कार्य कर रहा है जैसे मास्टर। दूसरी ओर, सेकंड्स_बिहाइंड_मास्टर के लिए ऊपर की ओर ढलान इंगित करता है कि दास मास्टर की तुलना में धीमा प्रदर्शन कर रहा है।
Azure पर MySQL के लिए स्केलग्रिड का मॉनिटरिंग कंसोल स्लेव नोड्स के लिए समय के साथ SBM के मानों को प्लॉट करता है।
SBM का शून्य या स्थिर मान
उपरोक्त उदाहरण में, मास्टर के सक्रिय लेखन के लगभग 40 घंटे बाद दास को शुरू किया गया था। एक बार शुरू होने के बाद, दास ने उस डेटा की नकल करना शुरू कर दिया, और हम देखते हैं कि एसबीएम बहुत सपाट था, जो दर्शाता है कि दास को उसी गति से निष्पादित किया गया था जैसे मास्टर। यह भी ध्यान दें कि SBM का '0' तक गिरना बहुत तेज है, जिसका वास्तव में मतलब है कि हालांकि अंतिम लेन-देन दास द्वारा किया गया था, जो मास्टर पर लगभग 40 घंटे पहले निष्पादित किया गया था, एक बार जब हम पकड़ लेते हैं, तो '0' देरी होती है।
SBM के बढ़ते मूल्य
नीचे दिए गए ग्राफ में, हम देख सकते हैं कि SBM लगातार बढ़ रहा है, जिसका अर्थ है कि दास की निष्पादन गति मास्टर की तुलना में कम है। यह वास्तव में एक ऐसा मामला है जहां हम मास्टर पर लगातार लिखते हुए 20 धागे चला रहे हैं और एक सिंगल-थ्रेडेड गुलाम इसके साथ तालमेल नहीं रख पा रहा है।
आखिरकार, यह ध्यान रखना महत्वपूर्ण है कि अब तक की हमारी चर्चाओं में, हमने किसी भी नेटवर्क बाधाओं को नहीं माना है। धीमे नेटवर्क के मामले में, स्लेव IO थ्रेड स्वयं मास्टर से पिछड़ जाएगा, और यदि SQL थ्रेड पर्याप्त तेज़ है, तो SBM '0' और एक धनात्मक संख्या के बीच दोलन करेगा। ऐसे मामलों में, मास्टर के साथ वास्तविक अंतराल को समझने के लिए एसबीएम उपयोगी पैरामीटर नहीं होगा।
अगर आपको यह ब्लॉग पोस्ट अच्छी लगी हो, तो अपने डिप्लॉयमेंट को ऑप्टिमाइज़ करने के बारे में अधिक जानने के लिए हमारे अन्य लोकप्रिय MySQL डेटाबेस मैनेजमेंट ट्यूटोरियल देखें:
- आपके MySQL सर्वर के लिए InnoDB बफर पूल आकार की गणना करना
- MySQL Tutorial - SSL को अपने MySQL सर्वर पर कॉन्फ़िगर और प्रबंधित करना
- MySQL उच्च उपलब्धता फ्रेमवर्क समझाया गया - भाग I:परिचय