माइग्रेशन प्रोजेक्ट के दौरान, मुझे हमारे SQL सर्वर में 4 मिलियन रिकॉर्ड अपडेट का सामना करना पड़ रहा है।रिकॉर्ड-आईडी की सूची का उपयोग कर SQL सर्वर में 4 मिलियन रिकॉर्ड्स अपडेट कर रहा है इनपुट
अद्यतन बहुत आसान है; एक बूलियन क्षेत्र के लिए सही/1 निर्धारित करने की आवश्यकता है और इनपुट मैं सब आईडी के जिसके लिए इस क्षेत्र को भरा जाना चाहिए की एक सूची है। (प्रति पंक्ति एक आईडी)
मैं बिल्कुल एक विशेषज्ञ जब यह नहीं कर रहा हूँ इस आकार के एसक्यूएल कार्यों के लिए आता है, इसलिए मैंने एक "WHERE xxx IN ({list of ids, separated by comma})
" युक्त 1 अद्यतन विवरण का प्रयास करना शुरू कर दिया। सबसे पहले, मैंने इसे दस लाख रिकॉर्ड के साथ करने की कोशिश की। परीक्षण-सर्वर पर एक छोटे डेटासेट पर, यह एक आकर्षण की तरह काम करता था, लेकिन उत्पादन वातावरण में इसने एक त्रुटि दी। इसलिए, मैंने दो बार आईडी की सूची की लंबाई कम कर दी, लेकिन इसका कोई फायदा नहीं हुआ।
अगली बात मैंने कोशिश की थी कि सूची में प्रत्येक आईडी को अद्यतन विवरण ("UPDATE yyy SET booleanfield = 1 WHERE id = '{id}'
") में बदल दिया जाए। कहीं, मैंने पढ़ा है कि प्रत्येक एक्स लाइनों की संख्या में जाना अच्छा है, इसलिए मैंने प्रत्येक 100 लाइनों को एक गो डाला (उत्कृष्ट 'sed' टूल का उपयोग करके, यूनिक्स से पोर्ट किया गया)।
इसलिए, मैंने 250,000 प्रत्येक के हिस्सों में 4 मिलियन अपडेट स्टेटमेंट्स की सूची को अलग किया, उन्हें एसक्यूएल फाइलों के रूप में सहेजा और SQL सर्वर प्रबंधन स्टूडियो (2008) में पहले लोडिंग और चलाने शुरू कर दिया। ध्यान दें कि मैंने SQLCMD.exe को भी आजमाया है, लेकिन यह, मेरे आश्चर्य के लिए, एसक्यूएल स्टूडियो की तुलना में लगभग 10-20 गुना धीमा रहा।
इसे पूरा करने में लगभग 1,5 घंटे लग गए और परिणामस्वरूप "त्रुटियों के साथ क्वेरी समाप्त हुई"। हालांकि, संदेशों की सूची में "1 पंक्ति (ओं) प्रभावित" और "0 पंक्तियां प्रभावित" की एक अच्छी सूची थी, बाद में जब आईडी नहीं मिली थी।
अगला, मैंने COUNT (*) का उपयोग करके तालिका में अद्यतन रिकॉर्ड्स की मात्रा की जांच की और पाया कि अद्यतन विवरणों की मात्रा और अद्यतन रिकॉर्ड्स की मात्रा के बीच कुछ हज़ार रिकॉर्ड का अंतर था।
मैंने सोचा कि यह अस्तित्वहीन रिकॉर्ड के कारण हो सकता है, लेकिन जब मैंने आउटपुट में "0 पंक्तियों को प्रभावित" की मात्रा को घटा दिया, तो 8 9 5 रिकॉर्डों का एक रहस्यमय अंतर था।
मेरे सवालों का:
वहाँ किसी भी तरह से एक विवरण और में त्रुटियों का कारण पता लगाने के लिए है "क्वेरी त्रुटियों के साथ पूर्ण।"
895 अभिलेखों के रहस्यमय अंतर को कैसे समझाया जा सकता है?
इस अद्यतन को करने के लिए बेहतर, या सबसे अच्छा तरीका क्या है?
गैप या तो इस तथ्य से जुड़ा हुआ प्रतीत होता है कि आपके पास डुप्लिकेट आईडी (जो निश्चित रूप से 4 मिलियन रिकॉर्ड के साथ एक संभावना है) या आईडी के बिन तालिका (एक और संभावना) मौजूद नहीं है। –
आपने उन 4 मिल रिकॉर्ड को सीएसवी स्ट्रिंग में कैसे प्राप्त किया? – Kaf
कुल तालिका में कितने रिकॉर्ड हैं? मैं सोच रहा हूं कि अगर 4 मिलियन से अधिक हैं, तो कॉलम को छोड़ना बेहतर होगा, इसे 1 के डिफ़ॉल्ट के साथ जोड़ें, और अन्य पंक्तियों को 0 या शून्य पर अपडेट करें। – UnhandledExcepSean