समवर्ती इंडेक्स (CREATE INDEX CONCURRENTLY)
CREATE INDEX CONCURRENTLY से लेखन को रोके बिना इंडेक्स बनाएँ और बाधित निर्माण से उबरें
समवर्ती इंडेक्स (CREATE INDEX CONCURRENTLY), CoddyKit पर SQL Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
CREATE INDEX की समस्या
सामान्य CREATE INDEX एक SHARE लॉक लेता है — पूरी निर्माण प्रक्रिया के दौरान लेखन को रोकता है, लेकिन पढ़ने को नहीं। एक अरब पंक्तियों वाली तालिका पर इससे लेखन कई मिनट तक बंद रह सकता है।
CONCURRENTLY: समाधान
CREATE INDEX CONCURRENTLY लेखन को रोके बिना इंडेक्स बनाता है:
CREATE INDEX CONCURRENTLY idx_orders_user_id ON orders(user_id);यह कैसे काम करता है
तालिका को दो बार स्कैन किया जाता है:
- पहला चरण: वर्तमान पंक्तियों से इंडेक्स बनाना
- दूसरा चरण: पहले चरण के दौरान बदली गई पंक्तियों को शामिल करना
इसके अलावा, निर्माण शुरू होने से पहले शुरू हुए किसी भी समवर्ती लेन-देन के लिए थोड़ी देर प्रतीक्षा करनी पड़ती है।
लेन-देन के भीतर नहीं चल सकता
CONCURRENTLY दो बार COMMIT करता है — इसलिए इसे स्पष्ट BEGIN/COMMIT ब्लॉक के भीतर नहीं चलाया जा सकता:
BEGIN;
CREATE INDEX CONCURRENTLY ...; -- ERROR
COMMIT;धीमा, लेकिन ऑनलाइन
CONCURRENTLY को सामान्य CREATE INDEX से अधिक समय लगता है, क्योंकि इसमें दो स्कैन और लॉक की प्रतीक्षाएँ होती हैं। इसका लाभ है: शून्य डाउनटाइम।
विफलता से उबरना
यदि CONCURRENTLY विफल हो जाए, जैसे प्रक्रिया रुक जाए या सिस्टम में त्रुटि आ जाए, तो इंडेक्स INVALID स्थिति में छोड़ दिया जाता है:
SELECT relname FROM pg_class
WHERE relkind = 'i' AND NOT pg_index.indisvalid;
-- Fix: drop and re-create:
DROP INDEX CONCURRENTLY my_idx;
CREATE INDEX CONCURRENTLY my_idx ON ...;REINDEX CONCURRENTLY
PG 12 से बिना रोकावट के फिर से बनाएँ:
REINDEX INDEX CONCURRENTLY orders_user_id_idx;
REINDEX TABLE CONCURRENTLY orders;DROP INDEX CONCURRENTLY
यह भी रोकावट पैदा नहीं करता:
DROP INDEX CONCURRENTLY old_idx;UNIQUE इंडेक्स
UNIQUE इंडेक्स भी CONCURRENTLY बनाए जा सकते हैं। ऑनलाइन UNIQUE बाधाएँ जोड़ने में यह उपयोगी है:
CREATE UNIQUE INDEX CONCURRENTLY users_email_uidx ON users(email);
ALTER TABLE users ADD CONSTRAINT users_email_unique UNIQUE USING INDEX users_email_uidx;विदेशी कुंजी के इंडेक्स
बड़ी तालिका में FK जोड़ते समय सामान्य तरीका:
-- 1. Build the index online:
CREATE INDEX CONCURRENTLY orders_user_id_idx ON orders(user_id);
-- 2. Add the FK with NOT VALID (instant):
ALTER TABLE orders ADD CONSTRAINT orders_user_fk
FOREIGN KEY (user_id) REFERENCES users(id) NOT VALID;
-- 3. Validate in the background:
ALTER TABLE orders VALIDATE CONSTRAINT orders_user_fk;समवर्ती इंडेक्स निर्माण की लागत
तालिका के दो पूर्ण स्कैन और अतिरिक्त हिसाब-किताब। इससे CPU और IO की खपत होती है। संभव हो तो इसे कम ट्रैफ़िक वाले समय में चलाएँ।
प्रगति की निगरानी
PG 12+ में pg_stat_progress_create_index के माध्यम से प्रगति दिखाई जाती है:
SELECT phase,
blocks_done, blocks_total,
tuples_done, tuples_total
FROM pg_stat_progress_create_index;पुनरावलोकन
इंडेक्स प्रबंधित करने के लिए CONCURRENTLY प्रोडक्शन के अनुकूल तरीका है।
- CREATE/DROP/REINDEX CONCURRENTLY लेखन को नहीं रोकते
- इन्हें किसी लेन-देन के भीतर नहीं चलाया जा सकता
- विफलता से INVALID इंडेक्स बच जाते हैं — उन्हें साफ़ करें
- pg_stat_progress_create_index से निगरानी करें
त्वरित जाँच
CREATE INDEX CONCURRENTLY को स्पष्ट BEGIN/COMMIT ब्लॉक के भीतर क्यों नहीं चलाया जा सकता?
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 46
- पाठ
- 183
अक्सर पूछे जाने वाले प्रश्न
क्या “समवर्ती इंडेक्स (CREATE INDEX CONCURRENTLY)” पाठ निःशुल्क है?
हाँ—“समवर्ती इंडेक्स (CREATE INDEX CONCURRENTLY)” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“समवर्ती इंडेक्स (CREATE INDEX CONCURRENTLY)” में मैं क्या सीखूँगा?
CREATE INDEX CONCURRENTLY से लेखन को रोके बिना इंडेक्स बनाएँ और बाधित निर्माण से उबरें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“समवर्ती इंडेक्स (CREATE INDEX CONCURRENTLY)” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- ऑनलाइन माइग्रेशन: ALTER TABLE लॉक क्यों लगाता है
- समवर्ती इंडेक्स (CREATE INDEX CONCURRENTLY)
- शून्य-डाउनटाइम कॉलम नाम बदलना
- उपकरण: Flyway, Liquibase, Sqitch