Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

mysql में गतिरोध से कैसे बचें?

मेरी समझ से, एक चयन लॉक प्राप्त नहीं करता है और गतिरोध का कारण नहीं होना चाहिए।

हर बार जब आप कोई पंक्ति सम्मिलित/अद्यतन/या हटाते हैं, तो एक लॉक प्राप्त कर लिया जाता है। गतिरोध से बचने के लिए, आपको यह सुनिश्चित करना होगा कि समवर्ती लेनदेन उस क्रम में पंक्ति को अपडेट नहीं करते हैं जिसके परिणामस्वरूप गतिरोध हो सकता है। सामान्यतया, गतिरोध से बचने के लिए आपको हमेशा एक ही क्रम में लॉक प्राप्त करना चाहिए अलग-अलग लेन-देन में भी (उदाहरण के लिए हमेशा पहले टेबल ए, फिर टेबल बी)।

लेकिन अगर एक लेन-देन के भीतर आप केवल एक तालिका में सम्मिलित करते हैं तो यह शर्त पूरी होती है, और इसके बाद आमतौर पर गतिरोध नहीं होना चाहिए। क्या आप लेन-देन में कुछ और कर रहे हैं?

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

सुनिश्चित नहीं है कि आपके मामले में वास्तव में क्या होता है, लेकिन शायद यह मदद करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql Amazon RDS:'इनोडब फीचर डिसेबल्ड' एप्लिकेशन से त्रुटि

  2. php . में mysql डेटाबेस को अपडेट करने का प्रयास कर रहा है

  3. दो टेबल, सफेद एक से कई रिश्ते। डुप्लिकेट पंक्तियों के बिना मूल्यों में कैसे शामिल हों?

  4. SQL को SQL कीमिया में बदलें

  5. मल्टीथ्रेडिंग त्रुटि:पहले से ही इस कनेक्शन से जुड़ा एक खुला डेटा रीडर है जिसे पहले बंद किया जाना चाहिए