सूचकांक पुनर्गठन के दौरान लेनदेन लॉग को पूर्ण होने से कैसे रोकें?


19

हमारे पास कई मशीनें हैं जहां हमने 50gb के लेन-देन लॉग के आकार को पूर्व आवंटित किया है। जिस तालिका को मैं पुनर्गठित करने की कोशिश कर रहा हूं उसका आकार 55 - 60 gb है, लेकिन लगातार बढ़ती जा रही है। मुख्य कारण मैं पुनर्गठित करना चाहता हूं कि अंतरिक्ष और किसी भी प्रदर्शन लाभ को पुनः प्राप्त करना है क्योंकि एक अतिरिक्त बोनस है।

तालिका का विखंडन स्तर 30 - 35% है। इन मशीनों में से कुछ पर मुझे "लेनदेन लॉग पूर्ण" त्रुटि मिलती है और पुनर्गठन विफल हो जाता है। लेन-देन लॉग आकार 48gb तक पहुंच जाता है। इससे मुकाबला करने का एक अच्छा तरीका क्या है? हमारे पास ऑटो वेतन वृद्धि नहीं है और मैं ऐसा करने के लिए अनिच्छुक हूं।

मैं लॉग आकार को एक बड़े मूल्य में बढ़ा सकता हूं लेकिन जैसा कि भविष्य में तालिका आकार बढ़ता है, मान पर्याप्त नहीं हो सकता है। यदि यह समान रूप से लॉग आकार को बढ़ाने के लिए जा रहा है, तो यह अंतरिक्ष को पुनः प्राप्त करने के लिए पुनर्गठन करने के उद्देश्य को भी हराता है। इस बारे में कोई विचार कि मैं कैसे प्रभावी रूप से इसका मुकाबला कर सकता हूं? डेटा मोड स्वीकार्य नहीं होने के कारण बल्क मोड का उपयोग करना एक विकल्प नहीं है।

जवाबों:


7

सर्वोत्तम अभ्यासREORGANIZE लगभग 30% विखंडन से नीचे है और REBUILDइसके ऊपर है। बस, REBUILDएक साफ प्रतिलिपि बनाता है, REORGANIZEक्या यह इन-सीटू करता है।

जांचें कि आप वास्तव में क्या कर रहे हैं: आपके पास दोनों में से एक रखरखाव योजना नहीं है?

REORGANIZEयदि आप इस नियम का पालन करते हैं तो बड़ी मेज पर (50GB टेबल मिल रही है) मैंने सभी ट्रांजेक्शन लॉग स्पेस का उपभोग किया है । अक्सर नहीं: एक निश्चित लोड पैटर्न के साथ केवल एक प्रणाली। REORGANIZEलॉग जब तक बस दौड़ा विस्तार किया है और सभी डिस्क स्थान का सेवन किया।

हमने REBUILDअधिक समस्याओं के बजाय स्विच किया , लेकिन 25% से नीचे के विखंडन को अनदेखा कर दिया। यह हमारे लिए बेहतर काम करता है: आपको यह देखना होगा कि क्या यह आपके लिए काम करता है।

REBUILDREORGANIZEउत्पादन की तुलना में प्रदर्शन को अधिक प्रभावित कर सकता है , लेकिन इसे कभी-कभी ONLINEविकल्प (एंटरप्राइज़ संस्करण की आवश्यकता) के साथ कम किया जा सकता है ।


नियम-से-अंगूठे की संख्या और गुणात्मक और मात्रात्मक दोनों शब्दों में बात करना बहुत सहायक है।
रॉबिनो

6

REORGANIZE (ALTER INDEX के रूप में ... REORGANIZE) एक बहुत तेज ऑपरेशन है (ठीक है, ज्यादातर ...), जिसे थोड़ी मात्रा में लॉग की आवश्यकता होती है, किसी भी समय बाधित हो सकता है और बाद में फिर से शुरू हो सकता है, और छोटे बैच लेनदेन में आंतरिक रूप से काम करता है :

डीफ़्रैग्मेन्टेशन को लघु लेनदेन की एक श्रृंखला के रूप में किया जाता है, इसलिए लॉग बैकअप अक्सर लिया जाता है या यदि रिकवरी मॉडल सेटिंग SIMPLE है तो एक बड़ा लॉग अनावश्यक है।

क्या आप वाकई पुनर्निर्माण के बारे में बात नहीं कर रहे हैं ? एक सूचकांक REBUILD धीमा है, महंगा है, लॉग की एक विनम्र राशि का उपभोग करता है (यदि ऑफ़लाइन नहीं है और न्यूनतम लॉग नहीं किया जा सकता है , तो ऑनलाइन पुनर्निर्माण को न्यूनतम रूप से लॉग नहीं किया जा सकता है), एक एकल विशाल लेनदेन है और सभी काम को खोए बिना बाधित नहीं किया जा सकता है।

यह मुझे लगता है कि आप एक पुनर्निर्माण कर रहे हैं, जो वास्तव में एक असाधारण ऑपरेशन है जो आपको तब तक नहीं करना चाहिए जब तक कि आपके पास बहुत अच्छी तरह से सोचा गया कारण न हो। आप किस प्रकार के स्थान को पुनः प्राप्त कर रहे हैं? कुछ भी है कि DBCC CLEANTABLEसंभाल नहीं होगा? क्या आपने तालिका भौतिक संरचना की जांच की है, क्या यह तार्किक संरचना से अलग हो गया है ( विवरण के लिए हुड के तहत SQL सर्वर तालिका कॉलम देखें)?

यदि आपको वास्तव में तालिका का पुनर्निर्माण करना है तो मुझे डर है कि आपके पास बुलेट को काटने और आवश्यक लॉग को आवंटित करने के अलावा कोई विकल्प नहीं है। इसे ऑटो बढ़ने न दें, यह केवल प्रक्रिया को धीमा कर देगा। इसे तालिका के आकार से 2.5 गुना बढ़ाएं।

यदि तालिका का विभाजन किया जाता है तो आप एक बार में ऑफ़लाइन (और पुनर्गठन) एक विभाजन का पुनर्निर्माण कर सकते हैं। ऑनलाइन पुनर्निर्माण केवल पूरे टेबल स्तर पर किया जा सकता है।


2
मैं पुनर्गठन कर रहा हूं। पुनर्प्राप्ति मॉडल भरा हुआ है और मुझे एक बड़ा लेन-देन लॉग आकार दिखाई देता है। विफलता का कारण दो में से एक है 1. मिररिंग। लॉग को माध्यमिक में धकेल दिया जाना चाहिए इससे पहले कि अंतरिक्ष को पुनः प्राप्त किया जा सके 2. लॉग बैकअप। भले ही हम हर 15 मिनट में बैकअप लेते हों, लेकिन कभी-कभी इस कारण से असफल हो जाते हैं।

यहां समान स्थिति, 2008R2, इंडेक्स पुनर्गठन (पुनर्निर्माण नहीं), और यहां तक ​​कि सरल मोड (!) में यह झुकाव सबसे बड़ी तालिका के आकार से अधिक हो जाता है जो कि> 40 जीबी है। जब पूर्ण पुनर्प्राप्ति मोड में, 5min टॉगल बैकअप करने से भी मदद नहीं मिलती है, तो केवल एक विशाल TRN बैकअप फ़ाइल इंडेक्स रीगॉर के दौरान निर्मित होती है। यह समझ में नहीं आता है, लेकिन यह दो अलग-अलग सर्वरों पर समान व्यवहार है। किसी भी विचार को वास्तव में दस्तावेज के रूप में छोटे बैच के लेनदेन में कैसे विभाजित किया जाए?
realMarkusSchmidt

5

मैं इस मुद्दे को पहले था।

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

यह थोड़ा प्रति-सहज है क्योंकि आप जानते हैं कि यदि आप पुनर्गठित करते हैं तो इसे जारी रख सकते हैं जहाँ से इसे छोड़ा जा सकता है, यह सिर्फ इतना है कि गर्भपात वापस लाने के बजाय लेनदेन शुरू करता है।

यहाँ आप क्या करते हैं। यह थोड़ा लंबा लेकिन सीधा है।

  • अपनी लॉग फ़ाइल को अपेक्षाकृत बड़े आकार में प्री-ग्रो करें, लेकिन अधिकतम नहीं। मूल रूप से आप उपयोगी कार्य करने के लिए पर्याप्त जगह छोड़ना चाहते हैं, साथ ही अगर वे होते हैं तो कुछ छोटी वृद्धि के लिए, ताकि सामान्य संचालन बंद न हो।
  • अपने इंडेक्स को पुनर्गठित करने के लिए एक नौकरी बनाएँ ('पुनर्गठन')।
  • एक प्रदर्शन स्थिति पर एक एजेंट WMI चेतावनी ('पुनर्गठन वाल्व को फिर से संगठित') बनाएँ।

    • ऑब्जेक्ट: SQLServer: डेटाबेस
    • काउंटर: प्रतिशत लॉग प्रयुक्त
    • उदाहरण: (आपका बड़ा डेटाबेस नाम)
    • चेतावनी यदि काउंटर ऊपर उठता है: 80
    • प्रतिक्रिया: निष्पादित कार्य ('चेक का पुनर्गठन करें')
  • एक नौकरी बनाएँ ('चेक का पुनर्गठन करें')

    • जॉब में msdb.dbo.sysjobactivity को यह देखने के लिए जांचें कि क्या 'पुनर्गठन ’का काम चल रहा है। और अगर यह है ...
    • नौकरी बंद करो और तब तक मतदान करो जब तक यह बंद न हो जाए। इसमें कुछ सेकंड लग सकते हैं।
    • (यदि आप पूर्ण मोड में हैं) अपनी लॉग बैकअप नौकरी को ट्रिगर करें और समाप्त होने पर पुष्टि करें।
    • Sysinos_os_performance_counters को जांचें कि आपके लॉग फ्री स्पेस काउंटर ने आपकी सीमा से कम कर दिया है।
    • Re पुनर्गठन ’का काम शुरू करें।
  • यह सब कहीं न कहीं, यहां तक ​​कि एक विकास सैंडबॉक्स का परीक्षण करें, यह सुनिश्चित करने के लिए कि यह आपके उत्पादन सर्वर पर चिपकाए जाने से पहले ठीक से प्रदर्शन करता है।

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

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

यह एक तरह का अजीब परिदृश्य है। मुझे पूरा यकीन है कि मैंने कुछ साल पहले इस पर पाबंदी लगा दी होगी और जाहिर है कि यहाँ बुनियादी अंतर्निहित मुद्दे हैं। लेकिन अगर आप सैकड़ों सर्वरों से निपटते हैं तो कुछ एज केस ऐसे क्रॉप होंगे जो किसी भी तरह से नहीं किए जा सकते हैं, जो भी किसी भी व्यावसायिक कारण के लिए, मैकगिवेरिंग के अलावा एक अस्थायी समाधान जो काम करता है।

जब तक यह सुरक्षित, तार्किक, परीक्षण और अच्छी तरह से प्रलेखित है, तब तक कोई समस्या नहीं होनी चाहिए।


1

यह वही है जो मैंने आमतौर पर किया था (इंडेक्स रीगॉर के लिए मेरे पास कुछ टेबल हैं (प्रत्येक 80 + जीबी बड़े के साथ) क्योंकि पिछले रेगर काम को खोए बिना इंडेक्स रीगोर को किसी भी समय रोका जा सकता है)।

  1. इंडेक्स रीगॉर के दौरान मैं अपने नियमित 30 मिनट की आवृत्ति से प्रत्येक 10 मिनट की आवृत्ति पर टॉगल बैकअप बढ़ाऊंगा
  2. मेरे पास एक और सत्र है जो हर 1 मिनट में खाली स्थान की जाँच करता है, और यदि खाली स्थान एक सीमा से नीचे है, तो मैं इंडेक्स रीगॉर सत्र को रोक दूंगा और टॉगल बैकअप शुरू (या प्रतीक्षा) करूंगा। फिर इंडेक्स रीगॉर को पुनरारंभ करें।

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


1

मेरे पास प्रश्न लेखक के रूप में एक ही मुद्दा था, और उनकी टिप्पणियों को देखते हुए, मैं कह सकता हूं कि मेरे पास एक ही सेटअप था। जब मैं एक करने की कोशिश कर रहा था REORGANIZE, तो लॉग पूरी तरह से बढ़ता है, आकार की परवाह किए बिना, यहां तक ​​कि कई बार पूरे टेबल के आकार के लिए।

समस्या लेन-देन प्रतिकृति के कारण हुई थी । जाहिर है, REORGANIZEऑपरेशन समाप्त होने तक लॉग का बैकअप नहीं लिया जा सकता है। मैंने कहीं पढ़ा है कि यह Microsoft द्वारा ज्ञात समस्या थी, लेकिन मुझे यकीन नहीं है कि वह कहां है।

एक बार जब मैंने लेन-देन की प्रतिकृति को निष्क्रिय कर दिया, तो लॉग बैकअप ने सामान्य रूप से फिर से काम किया, और हर 30 सेकंड में लॉग बैकअप करते हुए मेरे लिए अच्छा काम किया।


0

मैं मान रहा हूँ कि आप कुछ की तर्ज पर चल रहे हैं:

REETANANE पर अन्य सूचकांक

दुर्भाग्य से, एक आंशिक आयोजन चलाने का कोई तरीका नहीं है (जिस तरह से आप उदाहरण के लिए लॉग फ़ाइल को आंशिक रूप से छोटा कर सकते हैं)। इस समस्याओं के बारे में मैं जिन तरीकों से सोच सकता हूं वे हैं:

1) डेटाबेस को सरल रिकवरी मोड में सेट करें जब आप पुनर्गठन करते हैं, लेकिन आपने कहा कि स्वीकार्य नहीं है

2) इंडेक्स को विभाजित करें - यदि आप लगभग समान आकार के विभाजन प्राप्त करने के लिए इंडेक्स को विभाजित करने के तरीके के बारे में सोच सकते हैं, तो आप स्वतंत्र रूप से प्रत्येक विभाजन को फिर से व्यवस्थित (या ऑनलाइन विकल्प के साथ पुनर्निर्माण) करने में सक्षम होंगे और इस तरह लॉग फाइल वृद्धि को सीमित कर सकते हैं

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

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