जब हम किसी मौजूदा तालिका में बड़ी संख्या में डेटा के साथ एक इंडेक्स जोड़ते हैं तो क्या होता है?


11

मेरे पास एक टेबल है जिसमें लगभग ~ 15 मिलियन रिकॉर्ड होंगे। अब मुझे तालिका में एक सूचकांक जोड़ने की आवश्यकता है।

एक इंडेक्स जोड़ने से तालिका में हर प्रविष्टि को अपडेट करने में कुछ समय लगेगा।

मैं काफी उलझन में हूँ कि क्या सूचकांक जोड़ने से डाउनटाइम पैदा होगा।

यदि हाँ, तो मैं डाउनटाइम को कैसे दूर कर सकता हूं?


जवाबों:


10

सादे के साथ CREATE INDEX, तालिका लिखने के लिए लॉक हो जाएगी, लेकिन पढ़ी नहीं जाएगी।

CREATE INDEX CONCURRENTLYलिखने के ताले से भी बचने के लिए उपयोग करें ।

से पर PostgreSQL डॉक्सCREATE INDEX :

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

और अधिक विशेष रूप से ( @ypercube की तरह टिप्पणी ):

PostgreSQL लिखते हुए बिना लॉक किए इंडेक्स बनाने का समर्थन करता है । के CONCURRENTLYविकल्प को निर्दिष्ट करके इस विधि को लागू किया जाता है CREATE INDEX। जब इस विकल्प का उपयोग किया जाता है, तो PostgreSQL को तालिका के दो स्कैन करने चाहिए, और इसके अलावा यह उन सभी मौजूदा लेनदेन की प्रतीक्षा करनी चाहिए जो संभावित रूप से सूचकांक को समाप्त करने के लिए उपयोग कर सकते हैं। इस प्रकार इस विधि को एक मानक इंडेक्स बिल्ड की तुलना में अधिक कुल काम की आवश्यकता होती है और इसे पूरा करने में अधिक समय लगता है। हालाँकि, चूंकि यह सामान्य ऑपरेशन को इंडेक्स के निर्माण के दौरान जारी रखने की अनुमति देता है, इसलिए यह विधि उत्पादन परिवेश में नए इंडेक्स को जोड़ने के लिए उपयोगी है।

बोल्ड जोर मेरा।

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