500 डेटाबेस के साथ SQL सर्वर 2017 - CU9 के बाद से लगातार एजी डिस्कनेक्ट


15

हाय सब लोग और आपकी मदद के लिए अग्रिम धन्यवाद। हम SQL सर्वर 2017 उपलब्धता समूहों के साथ चुनौतियों का सामना कर रहे हैं।

पृष्ठभूमि

कंपनी एक खुदरा बी 2 बी बैक-एंड सॉफ्टवेयर है। लगभग 500 एकल किरायेदार डेटाबेस और 5 साझा डेटाबेस सभी किरायेदारों द्वारा उपयोग किए जाते हैं। वर्कलोड की विशेषता ज्यादातर पढ़ी जाती है, और अधिकांश डेटाबेस में बहुत कम गतिविधि होती है।

सह-स्थान पर होस्ट किए गए भौतिक उत्पादन सर्वर हाल ही में एक साझा SAN / FCI कॉन्फ़िगरेशन में SQL Server 2014 एंटरप्राइज़ से Windows Server 2012 में अपग्रेड किए गए थे, 2 सॉकेट / 32 कोर / 768 GB रैम और स्थानीय पर SQL Server 2017 एंटरप्राइज़ Windows Server 2016 पर ऑलसेन एजी का उपयोग कर एसएसडी ड्राइव। एजी ट्रैफ़िक एक पार किए गए केबल कनेक्शन के साथ समर्पित 10G एनआईसी पोर्ट का उपयोग करता है।

उनकी आवश्यकता सभी डेटाबेस के लिए एक साथ विफलता के लिए है, इसलिए उन्हें उन सभी को एक ही एजी में रखना पड़ा। यह एक समान सर्वर पर एक एकल, गैर-पठनीय सिंक्रोनस प्रतिकृति है।

नए सर्वर जून 2018 से उत्पादन में हैं। नवीनतम सीयू (उस समय सीयू 7) और विंडोज अपडेट इंस्टॉल किए गए थे, और सिस्टम अच्छी तरह से काम कर रहा था। लगभग एक महीने बाद, CU7 से CU9 तक के सर्वरों को अपडेट करने के बाद, उन्होंने प्राथमिकता के क्रम में सूचीबद्ध निम्नलिखित चुनौतियों को नोट करना शुरू कर दिया।

हम SQL संतरी का उपयोग कर सर्वर की निगरानी कर रहे हैं और कोई शारीरिक अड़चन नहीं देखी गई है। सभी प्रमुख संकेतक अच्छे लगते हैं। CPU औसतन 20% है, IO समय आमतौर पर 1ms से कम है, RAM पूरी तरह से उपयोग नहीं किया गया है, और नेटवर्क <1%।

चुनौतियां

असफलता के बाद लक्षण बेहतर होने लगते हैं, लेकिन कुछ दिनों के भीतर वापस आ जाते हैं, इस बात की परवाह किए बिना कि सर्वर प्राथमिक है - लक्षण दोनों सर्वरों पर समान हैं।

  1. छिटपुट ग्राहक समय बहिष्कार और कनेक्टिविटी विफलताओं जैसे कि

    ... कनेक्शन स्थापित करते समय त्रुटि आई ...

    या

    निष्पादन समय समाप्त हो गया

    कभी-कभी ये 40 सेकंड तक चलते हैं, और फिर कम हो जाते हैं।

  2. लेन-देन लॉग बैकअप कार्य पहले की तुलना में 10X अधिक समय लेता है। पहले सभी 500 डेटाबेस के लॉग का बैकअप लेने में 2 - 3 मिनट लगते थे, अब इसमें 15-25 लगते हैं। हमने यह सत्यापित किया है कि बैकअप स्वयं अच्छे थ्रूपुट के साथ ठीक चलता है। हालांकि, एक लॉग का बैकअप पूरा करने के बाद, और अगला शुरू करने से पहले एक छोटी सी देरी है। यह बहुत कम शुरू होता है, लेकिन एक या दो दिनों के भीतर 2-3 सेकंड तक हो जाता है। 500 डेटाबेस से गुणा किया जाता है, और अंतर होता है।

  3. कभी-कभी, कुछ प्रतीत होता है यादृच्छिक डेटाबेस मैन्युअल विफलता के बाद "सिंक्रनाइज़ेशन नहीं" स्थिति में फंस जाते हैं। इसका समाधान करने का एकमात्र तरीका द्वितीयक प्रतिकृति पर या तो SQL सर्वर सेवा को पुनरारंभ करना है, या इन डेटाबेस को एजी में फिर से निकालना और फिर से जोड़ना है।

  4. CU10 द्वारा शुरू किया गया एक अन्य मुद्दा (और CU11 में हल नहीं किया गया है): Master.sys.dat डेटाबेस पर अवरुद्ध करने पर माध्यमिक समय-समय पर कनेक्शन और यहां तक ​​कि माध्यमिक प्रतिकृति के लिए SSMS ऑब्जेक्ट एक्सप्लोरर का उपयोग करने में असमर्थ। मूल कारण Microsoft SQL Server VSS लेखक द्वारा निम्नलिखित क्वेरी जारी करने से अवरुद्ध होता है:

    select name, 
           recovery_model_desc, 
           state_desc, 
           CONVERT(integer, is_in_standby), 
           ISNULL(source_database_id,0) 
      from master.sys.databases

टिप्पणियों

मेरा मानना ​​है कि मुझे त्रुटि लॉग में धूम्रपान बंदूक मिली। त्रुटि लॉग एजी संदेशों से भरे हुए हैं, जिन्हें 'केवल सूचनात्मक' के रूप में लेबल किया गया है, लेकिन ऐसा लगता है कि वे बिल्कुल भी सामान्य नहीं हैं, और अनुप्रयोग त्रुटियों के लिए उनकी आवृत्ति का बहुत मजबूत संबंध है।

त्रुटियां कई प्रकार की होती हैं, और क्रम में आती हैं:

  • DbMgrPartnerCommitPolicy :: SetSyncState: GUID

  • DbMgrPartnerCommitPolicy :: SetSyncAndRecoveryPoint: GUID

  • हमेशा उपलब्धता समूह के साथ द्वितीयक डेटाबेस कनेक्शन प्राथमिक प्रतिकृति के लिए प्राथमिक डेटाबेस 'एक्सवाईजेड' के लिए समाप्त होता है, प्रतिकृति आईडी के साथ 'डीबी': {GUID}। यह केवल सूचनात्मक संदेश है। कोई उपयोगकर्ता कार्रवाई की आवश्यकता नहीं है।

  • हमेशा उपलब्धता समूह प्रतिकृति के साथ प्राथमिक डेटाबेस 'एबीसी' के लिए स्थापित द्वितीयक डेटाबेस के साथ कनेक्शन प्रतिकृति आईडी: {GUID}। यह केवल सूचनात्मक संदेश है। कोई उपयोगकर्ता कार्रवाई की आवश्यकता नहीं है।

कुछ दिनों में उन हजारों में से 10 हैं।

यह लेख SQL 2016 पर त्रुटियों के अनुक्रम के उसी प्रकार पर चर्चा करता है और वहाँ यह असामान्य है। यह भी विफलता के बाद 'गैर-सिंक्रनाइज़िंग' घटना की व्याख्या करता है। इस मुद्दे पर चर्चा 2016 के लिए हुई थी और इस साल की शुरुआत में सीयू में तय की गई थी। हालाँकि, यह एकमात्र प्रासंगिक संदर्भ है जो मुझे पहले 2 प्रकार के संदेशों के लिए मिल सकता है, अन्य स्वत: प्रारंभिक सीडिंग संदेशों के संदर्भों के अलावा जो एजी के पहले से ही यहां स्थापित नहीं होने चाहिए।

यहां पिछले सप्ताह की दैनिक त्रुटियों का एक सारांश है, उन दिनों के लिए> PRIMARY पर प्रति प्रकार 10K त्रुटियां थीं (माध्यमिक शो 'प्राथमिक के साथ संबंध खो देता है ...'):

Date        Message Type (First 50 characters)                  Num Errors
10/8/2018   DbMgrPartnerCommitPolicy::SetSyncAndRecoveryPoint:  61953
10/3/2018   DbMgrPartnerCommitPolicy::SetSyncAndRecoveryPoint:  56812
10/4/2018   DbMgrPartnerCommitPolicy::SetSyncAndRecoveryPoint:  27951
10/2/2018   DbMgrPartnerCommitPolicy::SetSyncAndRecoveryPoint:  24158
10/7/2018   DbMgrPartnerCommitPolicy::SetSyncAndRecoveryPoint:  14904
10/8/2018   Always On Availability Groups connection with seco  13301
10/3/2018   DbMgrPartnerCommitPolicy::SetSyncState: 783CAF81-4  11057
10/3/2018   Always On Availability Groups connection with seco  10080

हम कभी-कभी "अजीब" संदेश भी देखते हैं जैसे:

उपलब्धता समूह डेटाबेस "DB" "SECONDARY" से "SECONDARY" में भूमिकाएं बदल रहा है, क्योंकि भूमिका सिंक्रनाइज़ेशन के कारण मिररिंग सत्र या उपलब्धता समूह विफल रहा। यह केवल सूचनात्मक संदेश है। कोई उपयोगकर्ता कार्रवाई की आवश्यकता नहीं है।

... बदलते राज्यों के एक मेजबान के बीच "SECONDARY" से "RESOLVING" तक।

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

प्रतीक्षा जब एजी त्रुटियों के गंभीर फटने होते हैं

लगभग 30 सेकंड बाद, वेट के संदर्भ में सब कुछ सामान्य हो जाता है, लेकिन एजी संदेश अलग-अलग दरों पर त्रुटि लॉग को भरते रहते हैं और दिन के अलग-अलग समय के दौरान, पीक आवर्स सहित बेतरतीब ढंग से बार-बार प्रकट होते हैं। इन एरर के फटने के दौरान वर्कलोड में लगातार वृद्धि निश्चित रूप से चीजों को बदतर बनाती है। यदि केवल कुछ डेटाबेस डिस्कनेक्ट हो जाते हैं, तो यह आमतौर पर कनेक्शन को समय से बाहर करने का कारण नहीं बनता है क्योंकि यह अपने आप ही जल्दी से हल हो जाता है।

हमने यह सत्यापित करने का प्रयास किया कि यह वास्तव में CU9 था जिसने इस मुद्दे को शुरू किया था, लेकिन हम दोनों नोड्स को केवल CU9 में डाउनग्रेड करने में सक्षम थे। CU8 में नोड को या तो डाउनग्रेड करने का प्रयास किया गया, जिसके परिणामस्वरूप नोड लॉग में समान त्रुटि दिखाते हुए 'रिज़ॉल्यूशन' स्थिति में अटक गया:

हमेशा संबंधित संसाधन ID के साथ उपलब्धता समूह पर जारी कॉन्फ़िगरेशन को नहीं पढ़ा जा सकता है '...। निरंतर कॉन्फ़िगरेशन एक उच्च-संस्करण SQL सर्वर द्वारा लिखा गया है जो प्राथमिक उपलब्धता प्रतिकृति को होस्ट करता है। स्थानीय SQL प्रतिकृति को द्वितीयक प्रतिकृति बनने के लिए स्थानीय SQL सर्वर आवृत्ति का नवीनीकरण करें।

इसका मतलब है कि हमें एक ही समय में CU8 में दोनों नोड्स को डाउनग्रेड करने में सक्षम होने के लिए नीचे का समय देना होगा। इससे यह भी पता चलता है कि एजी के लिए कुछ प्रमुख अपडेट थे जो यह बता सकते हैं कि हम क्या अनुभव कर रहे हैं।

हमने पहले से ही 0 से डिफ़ॉल्ट ( इस लेख के आधार पर हमारे बॉक्स पर 960 = ) को धीरे-धीरे 2,000 तक की त्रुटियों के साथ कोई प्रभाव नहीं देखा।

हम इन एजी डिस्कनेक्ट को हल करने के लिए क्या कर सकते हैं? वहाँ किसी को भी इसी तरह के मुद्दों का सामना कर रहा है? क्या एक एजी में बड़ी संख्या में डेटाबेस वाले अन्य लोग शायद CU9 या CU8 से शुरू होने वाले SQL त्रुटि लॉग में समान संदेश देख सकते हैं?

किसी भी सहायता के लिए अग्रिम रूप से धन्यवाद!

जवाबों:


9

अपडेट करें:

  1. बार-बार उपलब्धता समूह डिस्कनेक्ट्स को एक प्रतिगमन होने की पुष्टि की गई थी जो CU9 द्वारा पेश की गई थी और उन्हें CU12 स्थापित करने के बाद हल किया गया था।
  2. द्वितीयक प्रतिकृति पर अवरुद्ध मुद्दों की पुष्टि VSS लेखक कोड के अपडेट के साथ एक समस्या होने की पुष्टि की गई थी जो CU10 में पेश की गई थी। उम्मीद है कि यह सीयू 13. में हल हो जाएगा। अंतरिम समाधान मैन्युअल रूप से पूर्व-सीयू 10 DLL के साथ VSS लेखक DLL को बदलने के लिए है ...

    BEGIN RANT-SACTION;

    दुर्भाग्य से, Microsoft बार-बार क्यूए को न केवल विंडोज 10 अपडेट के लिए बार-बार असफल होने लगता है, लेकिन एंटरप्राइज़ मिशन महत्वपूर्ण सॉफ़्टवेयर जैसे कि SQL सर्वर भी।

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

    COMMIT RANT-SACTION;

2

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


2
हाय @Gonzalo और सलाह के लिए धन्यवाद। हमने पहले से ही max_worker_threads सेटिंग कोण को कवर किया है, हालांकि हमें "कोई कार्यकर्ता थ्रेड उपलब्ध नहीं" जैसी त्रुटियों का अनुभव नहीं हुआ जो ऐसे मामलों के लिए सामान्य हैं जहां पर्याप्त थ्रेड नहीं हैं। हमारे बॉक्स के लिए डिफॉल्ट 1k थ्रेड्स से कम था, हमने इसे धीरे-धीरे 2k तक बढ़ाया और त्रुटियों पर कोई प्रभाव नहीं देखा। हम वर्कर थ्रेड मेट्रिक्स इकट्ठा करते हैं, और वे लगभग 1500 के आसपास हैं, जिसमें एजी थ्रेड्स शामिल हैं जिन्हें अधिकतम की ओर नहीं गिना जाता है। इसलिए, हम थ्रेड सीमा से बहुत दूर हैं।
SQLRaptor
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.