2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
सामग्रीसूची
1. दत्तांशकोशतालानां संक्षिप्तं वर्णनम्
2. अन्तरालस्य संक्षिप्तं वर्णनम्
3. InnoDB मध्ये पङ्क्ति-स्तरीय-तालाः कथं कार्यान्विताः भवन्ति
4. केषु परिस्थितिषु दत्तांशकोशे गतिरोधः भविष्यति?
5. दत्तांशकोशस्य गतिरोधस्य समाधानस्य संक्षेपेण वर्णनं कुर्वन्तु
तालाः एकं प्रमुखं विशेषता अस्ति यत् दत्तांशकोशप्रणालीं सञ्चिकातन्त्रेभ्यः भेदयति तालातन्त्रस्य उपयोगः साझासंसाधनानाम् समवर्तीप्रवेशस्य प्रबन्धनार्थं भवति । लॉक्स् इत्यस्य लक्षणं संक्षेपेण परिचययितुं MySQL डाटाबेस् इत्यस्य InnoDB इञ्जिन् उदाहरणरूपेण गृह्णामः ।
यदि कश्चन व्यवहारः T1 पङ्क्तिः r इत्यस्य साझां तालं प्राप्तवान् अस्ति, तर्हि अन्यः व्यवहारः T2 तत्क्षणमेव पङ्क्तिः r इत्यस्य साझीकृतं तालं प्राप्तुं शक्नोति, यतः पठनेन पङ्क्तिः r इत्यस्य दत्तांशः न परिवर्ततेपरन्तु यदि अन्यः व्यवहारः T3 r पङ्क्तौ अनन्यं तालं प्राप्तुम् इच्छति तर्हि r पङ्क्तौ साझां तालं मुक्तं कर्तुं T1 तथा T2 लेनदेनयोः प्रतीक्षां कर्तव्याताला असङ्गतम् . निम्नलिखित चित्रे साझा तालानां अनन्यतालानां च संगतता दर्शिता अस्ति यत् X ताला कस्यापि तालाया सह असङ्गतः अस्ति, यदा तु S ताला केवलं S तालानां सह संगतः अस्ति । इदं ज्ञातव्यं यत् S lock तथा X lock इत्येतयोः द्वयोः अपि पङ्क्तितालाः सन्ति, संगतता च एकस्मिन् अभिलेखे (पङ्क्तिः) तालानां संगततां निर्दिशति ।
X | स | |
X | न सङ्गतम् | न सङ्गतम् |
स | न सङ्गतम् | सुयोग्य |
ताला दानेदारता : InnoDB भण्डारण-इञ्जिन् बहु-दानेदारता-लॉकिंग् समर्थयति, यत् लेनदेनेषु पङ्क्ति-स्तरीय-तालाः, तालिका-स्तरीय-तालाः च एकस्मिन् समये भवितुं शक्नुवन्ति । विभिन्नेषु दाणिकासु तालाबन्दीक्रियाणां समर्थनार्थं InnoDB भण्डारणइञ्जिनं अभिप्रायः तालाबन्दी इति अतिरिक्तं तालाबन्दीविधिं समर्थयति । अभिप्रायतालाः ताडितानां वस्तूनाम् अनेकस्तरयोः विभाजनं कुर्वन्ति अभिप्रायतालाः इत्यस्य अर्थः अस्ति यत् लेनदेनाः सूक्ष्मतरदाणेदारतायां तालान् कर्तुम् इच्छन्ति ।
InnoDB भण्डारण-इञ्जिन् अभिप्राय-तालानां तुल्यकालिकं सरलं डिजाइनं समर्थयति, तस्य अभिप्राय-तालाः च तालिका-स्तरीय-तालाः सन्ति । मुख्यं डिजाइन उद्देश्यं व्यवहारे अग्रिमपङ्क्तौ अनुरोधितस्य तालस्य प्रकारं प्रकाशयितुं भवति । एतत् द्वौ प्रकारौ अभिप्रायतालानां समर्थनं करोति : १.
1. Intent Shared Lock (IS Lock), लेनदेनं सारणीयां कतिपयानां पङ्क्तयः कृते shared lock प्राप्तुं इच्छति ।
2. Intent exclusive lock (IX Lock), लेनदेनं सारणीयां कतिपयेषु पङ्क्तौ अनन्यतालान् प्राप्तुम् इच्छति ।
यतः InnoDB भण्डारण-इञ्जिन् पङ्क्ति-स्तरीय-तालानां समर्थनं करोति, अभिप्राय-तालाः पूर्ण-सारणी-स्कैन्-व्यतिरिक्तं वास्तवतः किमपि अनुरोधं न अवरुद्धं करिष्यन्ति । अतः सारणी-स्तरीयानाम् अभिप्राय-तालानां पङ्क्ति-स्तरीय-तालानां च संगतता निम्नलिखितरूपेण भवति ।
अस्ति | IX | स | X | |
अस्ति | सुयोग्य | सुयोग्य | सुयोग्य | न सङ्गतम् |
IX | सुयोग्य | सुयोग्य | न सङ्गतम् | न सङ्गतम् |
स | सुयोग्य | न सङ्गतम् | सुयोग्य | न सङ्गतम् |
X | न सङ्गतम् | न सङ्गतम् | न सङ्गतम् | न सङ्गतम् |
ताला एल्गोरिदम: InnoDB भण्डारण इञ्जिन् मध्ये त्रीणि पङ्क्तिताला एल्गोरिदम् सन्ति, ये सन्ति:
1. Record Lock: एकस्मिन् पङ्क्ति-अभिलेखे लॉक् कुर्वन्तु ।
2. Gap Lock: अन्तराल ताला, ताला
3. Next-Key Lock: Gap Lock+Record Lock, एकं रेन्जं लॉक कृत्वा स्वयं रिकार्ड् लॉक् कुर्वन्तु।
Record Lock सदैव अनुक्रमणिका अभिलेखान् ताडयिष्यति यदि InnoDB भण्डारणइञ्जिनसारणी निर्मितसमये कस्यापि अनुक्रमणिकायाः सह न स्थापिता अस्ति, तर्हि InnoDB भण्डारणइञ्जिनं ताडयितुं अन्तर्निहितप्राथमिककुंजीम् उपयुज्यते । Next-Key Lock इति एकं लॉकिंग एल्गोरिदम् अस्ति यत् Gap Lock तथा Record Lock इत्येतयोः संयोजनं करोति Next-Key Lock एल्गोरिदम् इत्यस्य अन्तर्गतं InnoDB पङ्क्तिप्रश्नानां कृते एतत् लॉकिंग एल्गोरिदम् उपयुज्यते । Next-Key Lock इत्यस्य उपयोगेन लॉकिंग् प्रौद्योगिकी Next-Key Locking इति कथ्यते, तस्य डिजाइनं च Phantom Problem (phantom reading) इत्यस्य समाधानार्थं न भवति । एतस्य तालाबन्दीप्रौद्योगिक्याः उपयोगेन यत् तालाबद्धं भवति तत् एकं मूल्यं न, अपितु परिधिः, यत् Predict Lock इत्यस्य सुधारः अस्ति ।
गतिरोधस्य विषये : गतिरोधः निष्पादनकाले संसाधनानाम् स्पर्धायाः कारणेन द्वयोः वा अधिकयोः लेनदेनयोः परस्परं प्रतीक्षमाणस्य घटनां निर्दिशति । बाह्यबलं विना कार्याणि अग्रे गन्तुं न शक्ष्यन्ति।
ताला उन्नयनम् :Lock escalation इति वर्तमान lock इत्यस्य दानेदारतां न्यूनीकर्तुं निर्दिशति । यथा, दत्तांशकोशः सारणीयाः १,००० पङ्क्ति-तालान् पृष्ठ-तालान् प्रति उन्नयनं कर्तुं शक्नोति, अथवा पृष्ठ-तालान् सारणी-तालान् प्रति उन्नयनं कर्तुं शक्नोति ।
InnoDB भण्डारण इञ्जिन् मध्ये ताला उन्नयनस्य समस्या नास्ति । यतः प्रत्येकस्य अभिलेखस्य आधारेण पङ्क्ति-तालान् न जनयति, तद्विपरीतम्, प्रत्येकेन व्यवहारेण अभिगतस्य प्रत्येकस्य पृष्ठस्य आधारेण तालान् प्रबन्धयति, बिटमैप्-विधिम् उपयुज्य अतः व्यवहारः पृष्ठे एकं अभिलेखं वा बहुविधं अभिलेखं वा ताडयति वा, प्रायः व्ययः समानः एव भवति ।
InnoDB भण्डारण इञ्जिन् मध्ये त्रीणि पङ्क्तिलॉक् एल्गोरिदम्स् सन्ति, तथा च gap lock (Gap Lock) तेषु अन्यतमम् अस्ति । अन्तरालस्य तालानां उपयोगः श्रेणीं ताडयितुं भवति, परन्तु अभिलेखाः एव न । अस्य उद्देश्यं बहुविधव्यवहाराः अभिलेखान् एकस्मिन् परिधिमध्ये सम्मिलितुं न शक्नुवन्ति, येन प्रेतपठनसमस्याः उत्पद्यन्ते ।
InnoDB पङ्क्ति-स्तरस्य तालाबन्दी अनुक्रमणिकायां अनुक्रमणिकाप्रविष्टीनां ताडनेन कार्यान्वितं भवति । InnoDB केवलं तदा एव पङ्क्ति-स्तरीय-तालानां उपयोगं करोति यदा अनुक्रमणिका-स्थितीनां माध्यमेन आँकडानां पुनः प्राप्तिः भवति, अन्यथा InnoDB सारणी-तालानां उपयोगं करोति ।
यदा सारणीयां कतिपयानि पङ्क्तयः ताडिताः भवन्ति तदा भिन्नाः व्यवहाराः भिन्नानां पङ्क्तयः ताडयितुं भिन्नानां अनुक्रमणिकानां उपयोगं कर्तुं शक्नुवन्ति । तदतिरिक्तं, प्राथमिककुंजीसूचकाङ्कस्य उपयोगः, अद्वितीयसूचकाङ्कः वा साधारणसूचकाङ्कः वा उपयुज्यते वा, InnoDB दत्तांशं ताडयितुं पङ्क्तितालानां उपयोगं करिष्यति ।
Deadlock इति एकं घटनां निर्दिशति यस्मिन् निष्पादनकाले संसाधनानाम् स्पर्धायाः कारणेन द्वौ वा अधिकौ व्यवहारौ परस्परं प्रतीक्षन्ते । बाह्यबलं विना कार्याणि अग्रे गन्तुं न शक्ष्यन्ति।निम्नलिखितसारणी गतिरोधस्य शास्त्रीयस्थितिं दर्शयति अर्थात् A B प्रतीक्षते B च A प्रतीक्षते एषा गतिरोधसमस्या उच्यतेएबी-बीए गतिरोध。
कालः | सत्रम् क | सत्र ख |
1 | आरम्भ: | |
2 | mysql>SELECT * FROM t WHERE a = 1 अद्यतनस्य कृते; ************1.पङ्क्ति************ क:1 सेट्(0.00sec) मध्ये 1 पङ्क्तिः। | आरम्भ: |
3 | mysql>SELECT * FROM t WHERE a = 2 अद्यतनस्य कृते; ************1.पङ्क्ति************ क:2 सेट्(0.00sec) मध्ये 1 पङ्क्तिः। | |
4 | mysql>SELECT * FROM t WHERE a = 2 अद्यतनस्य कृते; #प्रतीक्षतु | |
5 | mysql>SELECT * FROM t WHERE a = 1 अद्यतनस्य कृते; त्रुटिः 1213(40001): ताला प्राप्तुं प्रयतमाने गतिरोधः प्राप्तः;लेनदेनं पुनः आरभ्य प्रयतस्व |
गतिरोधसमस्यायाः समाधानस्य सरलतमः उपायः समयसमाप्तिः अस्ति, अर्थात् यदा द्वौ व्यवहारौ परस्परं प्रतीक्षन्ते, यदा एकः प्रतीक्षासमयः निर्धारितसीमाम् अतिक्रमति तदा एकः व्यवहारः पुनः रोल भवति, अपरः प्रतीक्षमाणः व्यवहारः निरन्तरं कर्तुं शक्नोति
समयसमाप्तितन्त्रस्य अतिरिक्तं वर्तमानदत्तांशकोशाः अपि सामान्यतया गतिरोधपरिचयार्थं प्रतीक्षा-ग्राफ् (wait graph) पद्धतेः उपयोगं कुर्वन्ति । एषः समयसमाप्तिसमाधानस्य अपेक्षया गतिरोधपरिचयस्य अधिकं सक्रियः उपायः अस्ति । एषः उपायः InnoDB भण्डारणइञ्जिनेण अपि स्वीकृतः अस्ति । wait-for graph इत्यस्य कृते दत्तांशकोशे निम्नलिखितद्वयप्रकारस्य सूचनाः संग्रहीतुं आवश्यकाः सन्ति ।
1. सूचनासूचीं ताडयन्तु;
2. लेनदेनस्य प्रतीक्षासूची;
उपरिष्टात् लिङ्क् कृतसूचिकायाः माध्यमेन आलेखः निर्मातुं शक्यते, यदि अस्मिन् आलेखे लूप् अस्ति तर्हि तस्य अर्थः अस्ति यत् गतिरोधः अस्ति, अतः संसाधनाः परस्परं प्रतीक्षन्ते । इदं अधिकं सक्रियं गतिरोधपरिचयतन्त्रम् अस्ति यदा प्रत्येकं लेनदेनं तालं याचते प्रतीक्षते तदा एतत् निर्धारयिष्यति यत् यदि अस्ति तर्हि गतिरोधः अस्ति वा सामान्यतया InnoDB भण्डारणइञ्जिनं व्यवहारं पुनः रोल कर्तुं चयनं करोति पूर्ववतस्य अल्पतमः परिमाणः ।