SQL सर्वर पर अनुक्रमणिका पुनर्निर्माण की गति में सुधार


9

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

अब मैं अनुक्रमणिका को फिर से सक्षम करना चाहता हूं, और मैं सोच रहा हूं कि क्या ऐसा कुछ है जो मैं इसे अनुकूलित करने के लिए कर सकता हूं।

> 100 टेबल और लगभग 2,000 इंडेक्स को फिर से बनाया जाना है। डेटाबेस आकार में 200GB है।

मेरे द्वारा चलाए जा रहे स्क्रिप्ट का मुख्य भाग यह है:

declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for
    select  'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild'
    from    sys.indexes as i
    Inner Join sys.objects o
    On o.object_id = i.object_id
    Where o.is_ms_shipped = 0
    And i.index_id >= 1
    and i.type > 1
    and i.is_disabled = 1

मैंने अनुक्रमणिका विवरण बदलने के लिए ONLINE = OFF की स्थापना पर विचार किया, लेकिन जैसा कि अनुक्रमणिका अक्षम होना शुरू हुई मुझे यकीन नहीं था कि इस सेटिंग का कोई प्रभाव पड़ेगा। मैंने SORT_IN_TEMPDB = ON सेट करने पर भी विचार किया, लेकिन जैसा कि tempdb फाइलें एक ही ड्राइव पर हैं। डेटाबेस की .mdf फाइलें मैं मानती हूं कि ऐसा करने का कोई लाभ भी नहीं था।

पुनर्निर्माण स्क्रिप्ट को चलाते हुए मैंने देखा है कि मेरे पास बहुत सारे CXPACKET प्रतीक्षा प्रकार हैं। मुझे वास्तव में समझ नहीं आया कि ऐसा क्यों होगा या यदि यह एक समस्या है जिसे मुझे संबोधित करना चाहिए।

एक अंतिम बिंदु जो प्रासंगिक हो सकता है: डेटाबेस में डेटा के इस आयात के अलावा मेरा पूरा सर्वर वर्तमान में निष्क्रिय है। विचार करने या चिंता करने के लिए कोई अन्य उपयोगकर्ता गतिविधि नहीं है; मेरी एकमात्र चिंता डेटाबेस में डेटा को कम से कम समय में आयात करना है।


3
जब आप कहते हैं कि आपकी एकमात्र चिंता आयात समय है, तो क्या आपका मतलब आयात शुरू होने से लेकर अनुक्रमणिका को फिर से सक्षम करने तक का है? यदि हां, तो आपको आयात के दौरान सक्षम किए गए अनुक्रमों को छोड़ देना चाहिए। 200GB डेटा के लिए 2,000 इंडेक्स मुझे बहुत सारे इंडेक्स की तरह लगते हैं। शायद आपको डीएमवी के सूचकांक उपयोग को देखना चाहिए कि क्या कुछ ऐसे हैं जिन्हें हटाया जा सकता है।
मैक्स वर्नोन

1
बस स्पष्ट करने के लिए, आपको वही 200GB आयात बार-बार करने की आवश्यकता है, और सिर्फ एक बार नहीं?
जॉन सिगेल सेप

1
मुझे केवल एक बार आयात करने की आवश्यकता है, लेकिन समय की सीमित खिड़की के साथ एक बड़ी प्रक्रिया के हिस्से के रूप में, इसलिए मैं वर्तमान में उस विंडो के भीतर फिट होने के लिए उस प्रक्रिया का परीक्षण कर रहा हूं। @MaxVernon ऐसा लगता है कि आप सही हैं कि अनुक्रमणिका को सक्षम करना सबसे तेज़ तरीका है, हालांकि मुझे आश्चर्य है क्योंकि मैंने पढ़ा होगा कि यह सामान्य रूप से अनुक्रमणिका को अक्षम करने, डेटा आयात करने, फिर अनुक्रमणिका को फिर से सक्षम करने के लिए तेज़ था। यह एक तृतीय-पक्ष डेटाबेस है, इसलिए अनुक्रमणिका को निकालना या अन्यथा इसे बदलना वास्तव में संभव नहीं है।
पौलह

3
ठीक है। CXPACKETवेट्स के बारे में : इंडेक्स खुद को स्कैन इंडेक्स (यहां तक ​​कि इंडेक्स को फिर से बनाया जा रहा है ) स्कैन करता है, और वे स्कैन समानता का उपयोग कर सकते हैं। आपको उन इंतजारों के बारे में चिंतित नहीं होना चाहिए - समानता शायद मदद कर रही है।
जॉन सीगल

जवाबों:


10

इस परिदृश्य में इष्टतम आयात प्रदर्शन प्राप्त करने के लिए तीन चीजों की आवश्यकता होती है:

  1. न्यूनतम-लॉग बेस तालिका आवेषण
  2. मिनिमली-लॉग नॉनक्लेस्टेड इंडेक्स बनाता है
  3. शारीरिक रीडिंग से बचना

न्यूनतम लॉगिंग

गैर- अनुक्रमित अनुक्रमणिका के बिना रिक्त क्लस्टर तालिका में न्यूनतम-लॉग आवेषण प्राप्त करना आवश्यक है:

  1. या तो का उपयोग SIMPLEया BULK_LOGGEDडेटाबेस वसूली मॉडल
  2. तालिका लॉक निर्दिष्ट करने और इनपुट का आदेश दिया (उदाहरण TABLOCKऔर ORDERसंकेत)

पक्षीय लेख:

क्लस्टर्ड टेबल पर न्यूनतम रूप से लॉग-इन आवेषण प्राप्त करना भी संभव है जिसमें गैर-अनुक्रमित अनुक्रमित हैं, बशर्ते कि ट्रेस ध्वज 610 सक्षम है। चाहे गैर-अनुक्रमित इंडेक्स आवेषण न्यूनतम रूप से लॉग-इन हो या नहीं, क्वेरी ऑप्टिमाइज़र द्वारा चयनित क्वेरी योजना पर निर्भर करता है।

यदि क्वेरी प्लान नॉनक्लेस्टेड इंडेक्स के लिए एक अलग इटरेटर का उपयोग करता है, और इटरेटर के पास DMLRequestSortप्रॉपर्टी सेट है true, तो नॉनक्लेस्टेड इंडेक्स आवेषण को न्यूनतम रूप से लॉग इन किया जाएगा, बशर्ते कि पहले उल्लेखित अन्य शर्तें पूरी हो चुकी हों।

गैर-अनुक्रमित इंडेक्स का निर्माण अलग से

ऐसा करने के फायदे हैं:

  1. TF 610 को सक्षम किए बिना क्लस्टर इंडेक्स आवेषण को न्यूनतम रूप से लॉग-इन किया जा सकता है
  2. CREATE INDEX यदि रिकवरी मॉडल नहीं है तो न्यूनतम लॉग इन करें FULL

शारीरिक रीडिंग से बचना

आदर्श रूप से, आयात किए जाने वाले डेटा को एक अलग मशीन पर संग्रहीत किया जाएगा, या डेटाबेस को होस्ट करने के लिए उपयोग किए जाने वाले अलग-अलग भौतिक भंडारण पर कम से कम।

डेटाबेस सर्वर को कैश में सबसे बड़ी बेस टेबल रखने के लिए पर्याप्त मेमोरी होनी चाहिए, जबकि नॉनक्लॉस्टिक इंडेक्स का निर्माण करने के लिए आवश्यक संचालन छाँटने के लिए पर्याप्त छोड़ दिया गया है।

एक अच्छा पैटर्न बेस टेबल (न्यूनतम-लॉग-क्लस्टर क्लस्टर इंडेक्स लोड) को तेजी से लोड करना है और फिर उस टेबल के लिए सभी गैर-अनुक्रमित इंडेक्स का निर्माण करना है, जबकि इसके डेटा पेज अभी भी कैश हैं।

यह प्रश्न एक ऐसी प्रक्रिया की रूपरेखा तैयार करता है जिसमें आधार तालिकाएँ पहले लोड की जाती हैं, और फिर निर्मित गैर-अनुक्रमित सूचकांक। कर्सर परिभाषा एकORDER BY समूह में एक साथ एक ही टेबल पर कम से कम समूह गैर-अनुक्रमित सूचकांक बिल्ड के लिए एक क्लॉज का उपयोग नहीं करती है

संभावना परिणाम अलग-अलग तालिकाओं के लिए डेटा पृष्ठों रहे हैं बार-बार कैश में पढ़ा और फिर खारिज कर दिया के रूप में nonclustered अनुक्रमणिका एक गैर नियतात्मक क्रम में बनाया जाता है।

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

सारांश

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

आप पहले से ही मौजूद गैर-अनुक्रमित अनुक्रमित तालिकाओं में डेटा लोड करने से पहले TF 610 को सक्षम करने का प्रयास कर सकते हैं। यह आमतौर पर पिछले पद्धति की तरह तेज नहीं है, लेकिन यह काफी तेज हो सकता है।

अधिक जानकारी के लिए निम्नलिखित देखें:

डेटा लोड हो रहा है प्रदर्शन गाइड

संचालन जो न्यूनतम रूप से लॉग इन किया जा सकता है

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