मैं इस मुद्दे को पहले था।
- आपके पास एक बड़ा डेटाबेस और एक छोटा लॉग ड्राइव है। आप (कई कारणों से) पुनर्गठन करना चाहते हैं।
- जब आप किसी बड़ी खंडित तालिका पर यह प्रयास करते हैं तो लॉग भर जाता है जब तक कि लॉग ड्राइव पूरी नहीं हो जाती है और फिर कमांड निरस्त हो जाती है।
- यदि यह सरल मोड में है तो अन्य लेनदेन विफल हो सकते हैं जब तक कि अगले चेकपॉइंट में लॉग को मंजूरी नहीं दी जाती है, और यदि यह पूर्ण मोड में है तो अन्य लेनदेन अगले लॉग बैकअप तक विफल हो सकते हैं। आउटेज!
- यदि आप पूर्ण मोड में हैं, तो आप अपनी लॉग बैकअप फ़्रीक्वेंसी बढ़ाते हैं, लेकिन यह समस्या से बचने में मदद नहीं करता है क्योंकि पुनर्गठन एक निहित लेनदेन में किया जाता है, लॉग तब तक स्पष्ट नहीं होता है जब तक कि लेन-देन समाप्त या गर्भपात नहीं होता है या रोका नहीं जाता है।
- और आप वास्तव में चाहते हैं कि पुनर्गठन को पूरा करने के लिए चलाने के लिए।
यह थोड़ा प्रति-सहज है क्योंकि आप जानते हैं कि यदि आप पुनर्गठित करते हैं तो इसे जारी रख सकते हैं जहाँ से इसे छोड़ा जा सकता है, यह सिर्फ इतना है कि गर्भपात वापस लाने के बजाय लेनदेन शुरू करता है।
यहाँ आप क्या करते हैं। यह थोड़ा लंबा लेकिन सीधा है।
- अपनी लॉग फ़ाइल को अपेक्षाकृत बड़े आकार में प्री-ग्रो करें, लेकिन अधिकतम नहीं। मूल रूप से आप उपयोगी कार्य करने के लिए पर्याप्त जगह छोड़ना चाहते हैं, साथ ही अगर वे होते हैं तो कुछ छोटी वृद्धि के लिए, ताकि सामान्य संचालन बंद न हो।
- अपने इंडेक्स को पुनर्गठित करने के लिए एक नौकरी बनाएँ ('पुनर्गठन')।
एक प्रदर्शन स्थिति पर एक एजेंट WMI चेतावनी ('पुनर्गठन वाल्व को फिर से संगठित') बनाएँ।
- ऑब्जेक्ट: SQLServer: डेटाबेस
- काउंटर: प्रतिशत लॉग प्रयुक्त
- उदाहरण: (आपका बड़ा डेटाबेस नाम)
- चेतावनी यदि काउंटर ऊपर उठता है: 80
- प्रतिक्रिया: निष्पादित कार्य ('चेक का पुनर्गठन करें')
एक नौकरी बनाएँ ('चेक का पुनर्गठन करें')
- जॉब में msdb.dbo.sysjobactivity को यह देखने के लिए जांचें कि क्या 'पुनर्गठन ’का काम चल रहा है। और अगर यह है ...
- नौकरी बंद करो और तब तक मतदान करो जब तक यह बंद न हो जाए। इसमें कुछ सेकंड लग सकते हैं।
- (यदि आप पूर्ण मोड में हैं) अपनी लॉग बैकअप नौकरी को ट्रिगर करें और समाप्त होने पर पुष्टि करें।
- Sysinos_os_performance_counters को जांचें कि आपके लॉग फ्री स्पेस काउंटर ने आपकी सीमा से कम कर दिया है।
- Re पुनर्गठन ’का काम शुरू करें।
यह सब कहीं न कहीं, यहां तक कि एक विकास सैंडबॉक्स का परीक्षण करें, यह सुनिश्चित करने के लिए कि यह आपके उत्पादन सर्वर पर चिपकाए जाने से पहले ठीक से प्रदर्शन करता है।
आप जो देखेंगे वह है 'पुनर्गठन' का काम शुरू होता है और लॉग भरना शुरू होता है। जब लॉग एक प्रतिशत पूर्ण हिट करता है तो यह WMI अलर्ट (लगभग 30 के भीतर) को चलाता है जो आपकी दूसरी नौकरी चलाता है जो देखता है कि 'पुनर्गठन' नौकरी चल रही है और इसलिए गलती की संभावना है। यह तब 'पुनर्गठन' को रोकता है, एक बैकअप करता है, लॉग की पुष्टि करता है कि रिक्त स्थान एक उचित मूल्य पर वापस आ गया है, फिर अपना 'पुनर्गठन' कार्य फिर से शुरू करता है जो उठाएगा जहां इसे छोड़ दिया गया है।
इसलिए जब आप इस परिदृश्य में अपने लॉग को एक उचित आकृति के लिए आकार दे सकते हैं, तो यह वृद्धि / ट्रिगर / नौकरी / स्टॉप / पुनरारंभ की संख्या को कम करना है, ताकि यह अधिक कुशल हो सके, और इसके लिए पर्याप्त जगह भी रख सके। कभी-कभार होने वाली ग्रोथ जो समय पर पकड़ी नहीं जाती हैं।
यह एक तरह का अजीब परिदृश्य है। मुझे पूरा यकीन है कि मैंने कुछ साल पहले इस पर पाबंदी लगा दी होगी और जाहिर है कि यहाँ बुनियादी अंतर्निहित मुद्दे हैं। लेकिन अगर आप सैकड़ों सर्वरों से निपटते हैं तो कुछ एज केस ऐसे क्रॉप होंगे जो किसी भी तरह से नहीं किए जा सकते हैं, जो भी किसी भी व्यावसायिक कारण के लिए, मैकगिवेरिंग के अलावा एक अस्थायी समाधान जो काम करता है।
जब तक यह सुरक्षित, तार्किक, परीक्षण और अच्छी तरह से प्रलेखित है, तब तक कोई समस्या नहीं होनी चाहिए।