SQL सर्वर वितरित उपलब्धता समूह डेटाबेस सर्वर रिबूट के बाद सिंक नहीं कर रहा है


22

हम अपने SQL सर्वर पर एक बड़ा अपग्रेड करने के लिए तैयार हो रहे हैं और वितरित उपलब्धता समूहों के साथ कुछ असामान्य व्यवहार को नोटिस कर रहे हैं जिन्हें मैं आगे बढ़ने से हल करने की कोशिश कर रहा हूं।

पिछले महीने, मैंने SQL Server 2016 से एक दूरस्थ माध्यमिक सर्वर को SQL Server 2017 में अपग्रेड किया। यह सर्वर कई वितरित उपलब्धता समूहों (डीएजी) और एक अलग उपलब्धता समूह (एजी) का एक हिस्सा है । जब हमने इस सर्वर को अपग्रेड किया, तो हम इस बात से अनजान थे कि यह एक अपठनीय स्थिति में पहुंच जाएगा , इसलिए पिछले महीने के दौरान हम केवल प्राथमिक सर्वर पर निर्भर रहे हैं।

आगामी अपग्रेड के एक भाग के रूप में, मैंने सर्वर पर CU 4 पैच लागू किया और इसे रिबूट किया। जब सर्वर ऑनलाइन वापस आया, तो बस-पैचेड द्वितीयक ने दिखाया कि सभी डीएजी / एजी बिना किसी मुद्दे के सिंक कर रहे थे।

हालांकि, प्राथमिक एक बहुत अलग कहानी दिखा रहा था। यह वह रिपोर्ट कर रहा था

  • अलग एजी किसी भी मुद्दे के बिना सिंक्रनाइज़ किया गया था
  • लेकिन DAG एक समकालिक / स्वस्थ नहीं है

शुरू में घबराने के बाद, मैंने डीएजी में चीजों को फिर से सिंक्रनाइज़ करने के लिए निम्नलिखित चीजों का प्रयास किया:

  • प्राथमिक से, मैंने डेटा आंदोलन को रोक दिया और फिर से शुरू किया। इससे डेटा सिंक करना शुरू नहीं हुआ।
  • द्वितीयक पर (जिसे मैंने अभी पैच किया था) मैं भाग गया ALTER DATABASE [<database] SET HADR RESUME;- जो त्रुटियों के बिना निष्पादित होता है, लेकिन किसी भी सिंक्रनाइज़ेशन को फिर से शुरू नहीं करता है

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

क्या किसी ने इस मुद्दे में भाग लिया है जहां एक डीएजी रिबूट के बाद एक माध्यमिक के लिए सिंक्रनाइज़ करना शुरू नहीं करता है? यदि हां, तो इसका समाधान कैसे किया गया?

मैंने SQL सर्वर त्रुटि लॉग और द्वितीयक सर्वर पर ईवेंट व्यूअर दोनों की जाँच की, साधारण से कुछ भी नहीं था जिसे मैं देख सकता था।


मैंने उत्पादन में SQL 2017 का उपयोग कभी नहीं किया है, लेकिन क्या यह SQL के निचले स्तरों के बीच एजी का समर्थन करता है? हर दूसरे संस्करण को आप हमेशा अलग-अलग संस्करणों के बीच सेट कर सकते हैं, लेकिन एक बार जब आप अपने प्राथमिक को रिबूट करते हैं और यह एसक्यूएल के उच्च संस्करण पर विफल हो जाता है तो यह सिंक प्रक्रिया को रोक देगा।
एलन

जवाबों:


8

कृपया ध्यान दें, यह एक निश्चित जवाब नहीं है, लेकिन टैरिन के साथ चैट करने के बाद यह सबसे अच्छा जवाब है ।

हालांकि, प्राथमिक एक बहुत अलग कहानी दिखा रहा था। यह रिपोर्ट कर रहा था कि अलग-अलग एजी बिना किसी मुद्दे के सिंक कर रहे थे, लेकिन डीएजी एक नहीं सिंक्रोनाइज़िंग / नॉट हेल्दी स्टेट में थे

अगर वितरित डेटाबेस में अंतर्निहित व्यक्तिगत डेटाबेस और एजी कहते हैं कि वे स्वस्थ और सिंक्रनाइज़ हैं, तो एक अच्छा मौका है कि यह DMV और / या SSMS डैशबोर्ड में सिर्फ एक हिचकी है। चूँकि प्रतिकृति को जोड़ने के लिए कोई अशुद्धि नहीं थी और न ही डिस्कनेक्ट स्थिति में थी।

दुर्भाग्य से जब से इस मुद्दे को हल किया है, यह कहना मुश्किल है कि वास्तव में यह क्या था ... लेकिन भविष्य में अगर यह किसी के लिए होता है:

  • सभी समूहों पर sysinos_hadr_database_replica_states जांचें जो कुछ भी स्वस्थ नहीं हैं। यदि सभी स्वस्थ दिखते हैं, तो संभव है कि DMV अभी तक अपडेट नहीं हुआ है
  • यदि यह संपर्क समस्याओं के लिए अस्वास्थ्यकर / DMVs की अस्वस्थता की जाँच करता है (जैसे कि फारवर्डर के वैश्विक संपर्क से जुड़ने में सक्षम नहीं है)
  • डैन के जवाब में उन मुद्दों का उल्लेख है जो डेटाबेस स्टार्टअप से उत्पन्न हो सकते हैं - हालांकि इस मामले में उदाहरण नहीं पढ़ा जा सकता है, ताकि सबसे अधिक संभावना एक मुद्दा नहीं था, लेकिन आपके मामले में हो सकता है
  • यदि डेटाबेस पठनीय है, डमी टेबल / इंसर्ट के साथ स्मोक टेस्ट या ...
  • DEBUG चैनल आइटम का उपयोग करके विस्तारित घटना सत्र sqlserver.hadr_dump_log_blockया sqlserver.hadr_apply_log_blockयह देखने के लिए कि क्या माध्यमिक वास्तव में लॉग ब्लॉक प्राप्त कर रहा है या लागू कर रहा है ...
  • परफ्यूम की वस्तु SQLServer:Database Replica\Log Bytes Received/sec

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

यदि, हालांकि, यह नहीं है, तो हमें आगे की जांच करने की आवश्यकता होगी जो उत्तर के दायरे से बाहर है।


4

मैं यह सब इस चेतावनी के साथ प्रस्तुत करूंगा कि मेरे पास उत्पादन में कोई डीएजी नहीं है। मौलिक रूप से हालांकि यह सलाह एजी और डीएजी दोनों के बीच लागू होनी चाहिए।

क्या सेवा पुनरारंभ के बाद सिंक्रनाइज़ेशन फिर से शुरू हुआ? यदि ऐसा है तो मेरे कारण का सबसे अच्छा अनुमान रीडो एसपीआईडी ​​पर अवरुद्ध हो जाएगा। यदि यह अभी भी पुनरारंभ होने के बाद भी सिंक्रनाइज़ नहीं हो रहा है, तो यहां मैं पहले क्या देख रहा हूं:

AG की फिर से जाँच SPID को फिर से करना

आम तौर पर केवल एक पठनीय माध्यमिक होने वाली है। जाँच करने के लिए, निम्नलिखित चलाएँ:

select session_id, blocking_session_id, db_name(database_id), wait_type
from sys.dm_exec_requests
where command = 'DB STARTUP'

यदि कोई अवरोधक SPID दिखाई देते हैं, तो माध्यमिक को फिर से शुरू करने से पहले आपको उन्हें मारना होगा ( DB STARTUPSPID वही है जो पुनः संचालन को संभालता है)। मैं सुझाव देता हूं कि अवरोधक SPID की समीक्षा करने की कोशिश करें और कारण निर्धारित करें (आमतौर पर एक लंबी चलने वाली रिपोर्ट)।

यदि आप इस बारे में अधिक जानकारी चाहते हैं, तो यहां एक महान लेख (XEs का उपयोग करके इस प्रकार के व्यवहार के लिए निगरानी सहित) है

DMV की जाँच करें

यदि डेटा आंदोलन निलंबित है, तो आप निलंबित कारण के बारे में अधिक जानकारी प्राप्त करने के लिए डीएमवी का उल्लेख कर सकते हैं। निम्नलिखित चलाएँ:

select db_name(database_id), synchronization_state_desc, database_state_desc, suspend_reason_desc
from sys.dm_hadr_database_replica_states

बोल लेख suspend_reason थोड़ा आगे वर्णन करता है।


0

क्या आपका वितरित उपलब्धता समूह (DAG) विभिन्न क्षेत्रों के बीच विभाजित है? यदि ऐसा है तो आप डिफ़ॉल्ट SESSION_TIMEOUT मान (10 सेकंड) से बहुत कम हो सकते हैं। इसका मतलब यह है कि दोनों क्षेत्रों के बीच विलंबता पूरी तरह से सिंकिंग के लिए बहुत अधिक है।

एक सामान्य उपलब्धता समूह में सिंकिंग सत्र को अधिक स्थिर बनाने के लिए इसका SESSION_TIMEOUT मान बढ़ सकता है। मैंने पिछले साल के अंत में देखा कि DAG के SESSION_TIMEOUT पैरामीटर को संपादित नहीं किया जा सका। इसका मतलब यह था कि डीएजी केवल कम विलंबता परिदृश्यों के लिए व्यवहार्य थे। हमने Microsoft के साथ एक टिकट लॉग इन किया और इस साल के शुरू में एक हॉटफ़िक्स जारी किया गया था।

सुधार: SQL Server 2016 और 2017 में एक वितरित उपलब्धता समूह प्रतिकृति के लिए SESSION_TIMEOUT मान कॉन्फ़िगर करें

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