SSIS डेटा फ्लो डेटा एक्सेस मोड - तेज लोड बनाम 'टेबल या व्यू' का क्या मतलब है?


9

SQL सर्वर व्यवसाय इंटेलिजेंस डेवलपमेंट स्टूडियो का उपयोग करते हुए, मैं अपने SQL सर्वर तालिकाओं में डेटा आयात करने के लिए OLE DB गंतव्य डेटा फ़्लो के लिए बहुत सी फ़्लैट फ़ाइल करता हूं। OLE DB डेस्टिनेशन एडिटर में "डेटा एक्सेस मोड" के तहत, यह "टेबल या व्यू - फास्ट लोड" के बजाय "टेबल या व्यू" के लिए डिफॉल्ट करता है। अंतर क्या है; केवल इतना ही अंतर मुझे पता चल सकता है कि तेज लोड डेटा को बहुत तेजी से स्थानांतरित करता है।

जवाबों:


13

OLE DB डेस्टिनेशन घटक के डेटा एक्सेस मोड्स दो फ्लेवर में आते हैं - फास्ट और नॉन-फास्ट।

फास्ट, या तो "टेबल या व्यू - फास्ट लोड" या "टेबल या व्यू नाम चर - फास्ट लोड" का अर्थ है कि डेटा सेट-आधारित फैशन में लोड किया जाएगा।

धीमे - या तो "तालिका या दृश्य" या "तालिका या दृश्य नाम चर" एसएसआईएस के परिणामस्वरूप डेटाबेस में सिंगलटन इंसर्ट स्टेटमेंट जारी करेगा। यदि आप 10, 100, शायद 10000 पंक्तियों को भी लोड कर रहे हैं, तो संभवतः दो तरीकों के बीच थोड़ा सराहनीय प्रदर्शन अंतर है। हालाँकि, कुछ बिंदु पर आप इन सभी छोटे अनुरोधों के साथ अपने SQL सर्वर उदाहरण को संतृप्त करने जा रहे हैं। इसके अतिरिक्त, आप अपने लेन-देन लॉग से हटकर दुरुपयोग करने जा रहे हैं।

आप कभी गैर-तेज़ तरीके क्यों चाहते हैं? खराब डेटा। अगर मैंने डेटा की 10000 पंक्तियों में भेजा और 9999 वीं पंक्ति में 2015-02-29 की तारीख थी, तो आपके पास 10k परमाणु आवेषण और कमिट / रोलबैक होंगे। अगर मैं फास्ट विधि का उपयोग कर रहा था, तो 10k पंक्तियों के पूरे बैच या तो सभी को बचाएंगे या उनमें से कोई भी नहीं। और यदि आप यह जानना चाहते हैं कि कौन सी पंक्ति (पंक्तियाँ) त्रुटिपूर्ण हैं, तो आपके पास न्यूनतम स्तर 10k पंक्तियाँ होंगी।

अब, जितना संभव हो उतना तेज़ डेटा लोड करने के लिए दृष्टिकोण हैं और अभी भी गंदे डेटा को संभालते हैं। यह एक कैस्केडिंग विफलता दृष्टिकोण है और यह कुछ ऐसा दिखता है

कैस्केडिंग विफलता डालें

विचार यह है कि आप एक शॉट में जितना संभव हो सके सही आकार डालें, लेकिन यदि आपको खराब डेटा मिलता है, तो आप खराब पंक्तियों को प्राप्त करने के लिए डेटा को लगातार छोटे बैचों में फिर से शुरू करने का प्रयास करने जा रहे हैं। यहाँ मैं एक अधिकतम के साथ शुरू किया 10000 का सम्मिलित प्रतिबद्ध आकार (FastLoadMaxInsertCommit) त्रुटि पंक्ति स्वभाव पर, मैं यह करने के लिए बदल Redirect Rowसे Fail Component

अगला गंतव्य ऊपर के समान है, लेकिन यहां मैं एक तेज लोड का प्रयास करता हूं और इसे 100 पंक्तियों के बैचों में बचाता हूं। फिर से, उचित आकार के साथ आने का परीक्षण या कुछ दिखावा करें। इसके परिणामस्वरूप 100 पंक्तियों के 100 बैच भेजे जाएंगे क्योंकि हम कहीं न कहीं जानते हैं , कम से कम एक पंक्ति है जिसने तालिका के लिए अखंडता बाधाओं का उल्लंघन किया है।

मैं फिर मिक्स में एक तीसरा घटक जोड़ता हूं, इस बार मैं 1. के बैचों में सहेजता हूं या आप केवल फास्ट लोड संस्करण से दूर टेबल एक्सेस मोड को बदल सकते हैं क्योंकि यह एक ही परिणाम देगा। हम प्रत्येक पंक्ति को व्यक्तिगत रूप से सहेजेंगे और वह हमें एकल खराब पंक्ति (ओं) के साथ "कुछ" करने में सक्षम करेगी।

अंत में, मेरे पास एक असफल गंतव्य है। हो सकता है कि यह अभीष्ट गंतव्य के रूप में "समान" तालिका हो, लेकिन सभी स्तंभों को घोषित किया गया हो nvarchar(4000) NULL। उस तालिका में जो कुछ भी समाप्त होता है, उस पर शोध और सफाई / त्याग करने की आवश्यकता है या आपकी खराब डेटा रिज़ॉल्यूशन प्रक्रिया जो भी हो। अन्य लोग एक फ्लैट फ़ाइल पर डंप करते हैं, लेकिन वास्तव में, जो कुछ भी समझ में आता है कि आप खराब डेटा कार्यों को कैसे ट्रैक करना चाहते हैं।


5

फास्ट लोड अच्छी तरह से फास्ट लोड विकल्पों के तहत प्रलेखित है

  • आयातित डेटा फ़ाइल से पहचान मान रखें या SQL सर्वर द्वारा निर्दिष्ट अद्वितीय मान का उपयोग करें।

  • थोक लोड ऑपरेशन के दौरान एक अशक्त मान को बनाए रखें।

  • थोक आयात ऑपरेशन के दौरान लक्ष्य तालिका या दृश्य पर बाधाओं की जाँच करें।

  • बल्क लोड ऑपरेशन की अवधि के लिए एक टेबल-स्तर लॉक प्राप्त करें। बैच और प्रतिबद्ध आकार में पंक्तियों की संख्या निर्दिष्ट करें।


अंतर क्या है; केवल इतना ही अंतर मुझे पता चल सकता है कि तेज लोड डेटा को बहुत तेजी से स्थानांतरित करता है।

हुड के तहत, table or viewप्रत्येक पंक्ति को सम्मिलित करने के लिए अलग-अलग SQL कमांड table or view - with fast loadका उपयोग करेगा बनाम BULK INSERT कमांड का उपयोग करेगा।

यदि आप BULK INSERT में उपर्युक्त विकल्प देखते हैं जैसे number of rows in the batch= ROWS_PER_BATCHऔर commit size=BATCHSIZE

एक और परिदृश्य होगा ..

डिफ़ॉल्ट अधिकतम इन्सर्ट कमिट साइज़ (2147483647) बहुत अधिक है। तो उदाहरण के लिए आप 500K पंक्तियों को सम्मिलित कर रहे हैं और PK उल्लंघन के कारण बैच विफल रहता है। इस परिदृश्य में, जब आप तेजी से लोड विकल्प का उपयोग करते हैं तो पूरा बैच विफल हो जाएगा। आप त्रुटि विवरण प्राप्त करने में सक्षम नहीं होंगे।

यह वह जगह है जहाँ आप table or viewगंतव्य त्रुटि आउटपुट के रूप में हो सकते हैं । तो 500K में से, आप FAST LOAD का उपयोग 5K के इन्सर्ट कमिट साइज़ के साथ शुरू करते हैं। यदि उस बैच में 1 पंक्ति विफल हो जाती है, तो आप उन 5K बैच को table or viewलोड करने के लिए रीडायरेक्ट करेंगे - जो पंक्ति पंक्ति द्वारा पंक्ति का उपयोग केवल 5K पंक्तियों के लिए करते हैं और आप table or viewकिसी फ्लैट फ़ाइल की त्रुटि को भी पुनर्निर्देशित कर सकते हैं .. ताकि यदि कोई पंक्ति बैच विफल हो जाए यदि 5K, आप विफलता के कारण क्या इंगित करने में सक्षम हो जाएगा।

उपरोक्त विधि का लाभ यह है कि यदि कोई भी पंक्ति विफल नहीं होती है, तो वह पूरे बैच के लिए BULK INSERT (फास्ट लोड) का उपयोग करेगी।

SSIS aficionado Billinkc ने Stackoverflow पर एक समान प्रश्न का उत्तर दिया

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