लाखों पंक्तियों वाली तालिका में स्तंभ परिभाषा को बदलने का सबसे कुशल तरीका क्या है


9

मुझे उस तालिका में NOT NULL से NULL तक एक कॉलम बदलने की आवश्यकता है जिसमें लाखों पंक्तियाँ हों। मैंने एक सरल कोशिश की है

alter table Table1 ALTER COLUMN Column1 XML NULL

लेकिन यह हमेशा के लिए लेता है। तो यहाँ मेरे सवाल हैं:

  1. परिवर्तन को लागू करने में इतना समय क्यों लगता है?
  2. इसे करने का कोई बेहतर तरीका है?

जवाबों:


3

1) टेबल + नॉन क्लस्टर्ड इंडेक्स की पूरी संरचना पर किसी को अधिक जानकारी की आवश्यकता होगी ताकि यह पता लगाया जा सके कि क्या हो रहा है लेकिन मेरा संदेह NULL बिटमैप के साथ कुछ करना है।

कृपया विषय पर अधिक जानकारी के लिए देखें। http://www.sqlskills.com/BLOGS/PAUL/post/Misconceptions-around-null-bitmap-size.aspx

http://www.sqlskills.com/BLOGS/PAUL/post/A-SQL-Server-DBA-myth-a-day-(630)-three-null-bitmap-myths.aspx

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

http://jahaines.blogspot.com/2009/12/sql-server-2005-how-to-move-10-millions.html


6

क्या यह तेज होगा:

  1. के लिए सही परिभाषा के साथ एक नई तालिका बनाएँ Column1
  2. INSERT INTO <NewTable> SELECT * FROM <OriginalTable>;
  3. OriginalTable_old का मूल नाम बदलें; मूल के लिए नया नाम बदलें
  4. मान्य और ड्रॉप करें

यहां लाभ यह है कि आप ऑपरेशन की अवधि के लिए मूल तालिका पर ताला नहीं रखते हैं। तालिका को केवल नाम बदलने के चरण में बंद किया जाना चाहिए। (यह मानता है कि SQL सर्वर ऑब्जेक्ट स्तर का नाम बदलने का समर्थन करता है।)


हाँ, SQL सर्वर सिस्टम संग्रहीत कार्यविधि का उपयोग करके ऑब्जेक्ट स्तर के नाम का समर्थन करता है sp_rename
गोंसालु

मैं 1 मिनट के भीतर 3.5M पंक्तियों के साथ इस तरह से एक कॉलम को बदलने में सक्षम था।
मोहसिन अफशीन

2

कॉलम को NOT NULL से NULL तक बदलते समय हर पंक्ति को छूने की आवश्यकता होती है, यही वजह है कि इसे पूरा होने में इतना समय लगता है। इसे कम समय लेने का कोई तरीका नहीं है।


1

एक अन्य विकल्प यह है कि तालिका में सही परिभाषा के साथ एक नया कॉलम बनाया जाए, पुराने कॉलम के डेटा के साथ कॉलम अपडेट करें, फिर पुराने कॉलम को छोड़ दें।

या आप SE के किसी पुराने पोस्ट का उल्लेख कर सकते हैं जो किसी INT स्तंभ पर एक समान समस्या का इलाज करता है।

/programming/4311559/sql-server-performance-for-alter-table-alter-column-change-data-type


मेरे मामले में, मेरा कॉलम केवल NULLs से भरा हुआ है, इसलिए मैं सोच रहा हूं कि यह जाने का रास्ता होगा, सही नाम के साथ एक नया पूरी तरह से NULL कॉलम बनाना बिल्कुल भी समय नहीं लेना चाहिए ... फिर पुराने कॉलम को हटा देना चाहिए; लाखों आवेषणों से निपटने के बजाय ...
Zack

0

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

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