PostgreSQL प्रदर्शन और क्वेरी अनुकूलन · पाठ

पंक्ति-स्तरीय लॉकिंग रणनीतियाँ

समवर्ती लेखन को अनुकूलित करने के लिए पंक्ति-स्तरीय लॉक प्रबंधित करने की उन्नत रणनीतियाँ जानिए।

पाठ 3, कुल 4 में से12 चरण

पंक्ति-स्तरीय लॉकिंग रणनीतियाँ, CoddyKit पर PostgreSQL प्रदर्शन और क्वेरी अनुकूलन का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह PostgreSQL प्रदर्शन और क्वेरी अनुकूलन सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। PostgreSQL प्रदर्शन और क्वेरी अनुकूलन पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

रो-स्तरीय लॉकिंग क्यों?

जब कई उपयोगकर्ता या प्रक्रियाएं एक ही समय में समान डेटा बदलने का प्रयास करती हैं, तो डेटाबेस को टकराव रोकने और डेटा की अखंडता सुनिश्चित करने के लिए एक तरीके की आवश्यकता होती है। यहीं रो-स्तरीय लॉकिंग उपयोगी होती है।

रो-स्तरीय लॉक किसी लेन-देन को विशिष्ट रो पर विशेष या साझा पहुंच लेने देता है और लॉक जारी होने तक अन्य लेन-देन को परस्पर-विरोधी बदलाव करने से रोकता है। अधिक समवर्ती उपयोग वाले अनुप्रयोगों के लिए यह अत्यंत महत्वपूर्ण है।

निहित रो लॉक

PostgreSQL Data Manipulation Language (DML) ऑपरेशन, जैसे INSERT, UPDATE और DELETE, के दौरान रो-स्तरीय लॉक अपने आप लागू करता है।

  • INSERT: नई डाली गई रो पर विशेष लॉक लगाता है।
  • UPDATE: बदली जा रही रो पर विशेष लॉक लगाता है।
  • DELETE: हटाई जा रही रो पर विशेष लॉक लगाता है।

ये निहित लॉक सुनिश्चित करते हैं कि एक समय में केवल एक लेन-देन किसी विशिष्ट रो को बदल सके।

स्पष्ट लॉक: FOR UPDATE

कभी-कभी आपको रो को बदलने से पहले लॉक करना पड़ता है, विशेषकर तब जब आपके अनुप्रयोग के तर्क में डेटा पढ़ना, निर्णय लेना और फिर उसे अपडेट करना शामिल हो। ऐसे में SELECT ... FOR UPDATE अत्यंत उपयोगी है।

यह चुनी गई रो पर विशेष लॉक लगाता है और आपके लेन-देन के COMMIT या ROLLBACK होने तक अन्य लेन-देन को उन्हें अपडेट या हटाने से रोकता है।

FOR UPDATE का प्रयोग

यह उदाहरण आज़माइए। यदि आप एक डेटाबेस सत्र में SELECT ... FOR UPDATE चलाते हैं और फिर दूसरे सत्र से उसी रो पर UPDATE चलाने का प्रयास करते हैं, तो दूसरा सत्र प्रतीक्षा करेगा।

सत्र 1:

BEGIN;
SELECT * FROM products WHERE product_id = 1 FOR UPDATE;
-- Do some work...
-- UPDATE products SET stock = stock - 1 WHERE product_id = 1;
-- ROLLBACK; OR COMMIT;

FOR UPDATE: क्या होता है

पिछला कोड अंश दिखाता है कि FOR UPDATE कैसे काम करता है। यदि आपने सत्र 1 में SELECT चलाया और फिर तुरंत किसी अलग सत्र 2 में यह UPDATE चलाने का प्रयास किया, तो सत्र 2 तब तक प्रतीक्षा करेगा जब तक सत्र 1 COMMIT या ROLLBACK नहीं करता।

सत्र 2 (प्रतीक्षा करेगा):

UPDATE products SET price = 10.99 WHERE product_id = 1;

स्पष्ट लॉक: FOR SHARE

यदि आप अपडेट रोकना चाहते हैं, लेकिन अन्य लेन-देन को डेटा पढ़ने या अपना साझा लॉक प्राप्त करने देना चाहते हैं, तो क्या होगा?

SELECT ... FOR SHARE साझा लॉक प्राप्त करता है। इसका अर्थ है:

  • अन्य लेन-देन रो को पढ़ सकते हैं।
  • अन्य लेन-देन अपने FOR SHARE लॉक प्राप्त कर सकते हैं।
  • अन्य लेन-देन FOR UPDATE लॉक प्राप्त नहीं कर सकते और रो को बदल नहीं सकते।

FOR SHARE का प्रयोग

यदि सत्र 1 के पास FOR SHARE लॉक है, तो सत्र 2 भी FOR SHARE लॉक प्राप्त कर सकता है, लेकिन उसी रो पर FOR UPDATE या DML ऑपरेशन प्रतीक्षा करेगा।

सत्र 1:

BEGIN;
SELECT * FROM orders WHERE order_id = 101 FOR SHARE;
-- Do some calculations...
-- COMMIT; OR ROLLBACK;

अधिक सूक्ष्म लॉक: FOR NO KEY UPDATE

SELECT ... FOR NO KEY UPDATE FOR UPDATE के समान है, लेकिन कमजोर है। यह ऐसा विशेष लॉक प्राप्त करता है जो FOR KEY SHARE लॉक को अवरुद्ध नहीं करता।

जब आप गैर-कुंजी कॉलम अपडेट कर रहे हों और आम तौर पर बहुत कम समय तक चलने वाले समवर्ती विदेशी-कुंजी ऑपरेशन को रोकना आवश्यक न हो, तब यह उपयोगी है।

साझा पठन लॉक: FOR KEY SHARE

SELECT ... FOR KEY SHARE सबसे कमजोर स्पष्ट रो-स्तरीय लॉक है। यह अन्य लेन-देन को FOR SHARE, FOR NO KEY UPDATE और यहां तक कि अन्य FOR KEY SHARE लॉक प्राप्त करने देता है।

यह मुख्य रूप से अन्य लेन-देन को लॉक की गई रो हटाने या ऐसा विशेष लॉक प्राप्त करने से रोकता है जो कुंजी कॉलम में बदलाव कर सके। इसका उपयोग अक्सर विदेशी-कुंजी प्रतिबंधों द्वारा किया जाता है।

लॉकिंग क्रम की रणनीति

डेडलॉक रोकने की एक महत्वपूर्ण रणनीति यह है कि कई रो पर लॉक हमेशा एक समान क्रम में प्राप्त किए जाएं। डेडलॉक वह स्थिति है जिसमें दो लेन-देन अनिश्चित समय तक एक-दूसरे की प्रतीक्षा करते रहते हैं।

उदाहरण के लिए, यदि आपको product_id = 5 और product_id = 10 वाली रो को लॉक करना है, तो सभी लेन-देन में पहले 5 और फिर 10 को लॉक करें। इससे वह स्थिति नहीं बनेगी जिसमें एक लेन-देन पहले 5 को लॉक करके 10 का प्रयास करे, जबकि दूसरा पहले 10 को लॉक करके 5 का प्रयास करे।

त्वरित जांच: रो लॉक

दो समवर्ती लेन-देन पर विचार कीजिए। लेन-देन A SELECT * FROM users WHERE user_id = 1 FOR UPDATE; चलाता है। यदि लेन-देन B तुरंत UPDATE users SET email = 'new@example.com' WHERE user_id = 1; चलाने का प्रयास करे, तो क्या होगा?

पुनरावृत्ति: रो-स्तरीय लॉक

हमने देखा कि PostgreSQL रो-स्तरीय लॉक के साथ समवर्तीता को कैसे प्रबंधित करता है:

  • निहित लॉक DML ऑपरेशन की सुरक्षा करते हैं।
  • FOR UPDATE बदलावों के लिए विशेष रो लॉक प्रदान करता है।
  • FOR SHARE साझा लॉक प्रदान करता है, जिससे पठन की अनुमति मिलती है लेकिन अपडेट अवरुद्ध होते हैं।
  • FOR NO KEY UPDATE और FOR KEY SHARE अधिक सूक्ष्म नियंत्रण प्रदान करते हैं।
  • लॉक प्राप्त करने का क्रम हमेशा समान रखना डेडलॉक रोकने की एक महत्वपूर्ण रणनीति है।

इन रणनीतियों में दक्षता प्राप्त करने से आपका अनुप्रयोग समवर्ती लेखन को कुशलतापूर्वक और विश्वसनीय ढंग से संभाल पाता है!

शुरुआत निःशुल्क

एआई शिक्षक के साथ SQL सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
22
पाठ
88

अक्सर पूछे जाने वाले प्रश्न

क्या “पंक्ति-स्तरीय लॉकिंग रणनीतियाँ” पाठ निःशुल्क है?

हाँ — PostgreSQL प्रदर्शन और क्वेरी अनुकूलन अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “पंक्ति-स्तरीय लॉकिंग रणनीतियाँ” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। PostgreSQL प्रदर्शन और क्वेरी अनुकूलन पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“पंक्ति-स्तरीय लॉकिंग रणनीतियाँ” में मैं क्या सीखूँगा?

समवर्ती लेखन को अनुकूलित करने के लिए पंक्ति-स्तरीय लॉक प्रबंधित करने की उन्नत रणनीतियाँ जानिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ PostgreSQL प्रदर्शन और क्वेरी अनुकूलन का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या PostgreSQL प्रदर्शन और क्वेरी अनुकूलन शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर PostgreSQL प्रदर्शन और क्वेरी अनुकूलन शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“पंक्ति-स्तरीय लॉकिंग रणनीतियाँ” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस PostgreSQL प्रदर्शन और क्वेरी अनुकूलन पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर PostgreSQL प्रदर्शन और क्वेरी अनुकूलन पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. लॉक और डेडलॉक समझना
  2. लॉक के लिए प्रतिस्पर्धा की पहचान और समाधान
  3. पंक्ति-स्तरीय लॉकिंग रणनीतियाँ
  4. Application coordination के लिए advisory lock
← PostgreSQL प्रदर्शन और क्वेरी अनुकूलन पर वापस जाएँ