सबसे पहले, गतिरोध स्पष्ट लॉकिंग पर निर्भर नहीं करते हैं। MySQL की LOCK TABLE या गैर-डिफ़ॉल्ट लेनदेन अलगाव मोड का उपयोग करने के लिए डेडलॉक होना आवश्यक नहीं है। यदि आप कभी भी स्पष्ट लेन-देन का उपयोग नहीं करते हैं तो भी आपके पास गतिरोध हो सकता है।
गतिरोध एक ही टेबल पर काफी आसानी से हो सकता है। आमतौर पर यह एक ही गर्म मेज से होता है।
गतिरोध यहां तक कि . कर सकते हैं तब होता है जब आपके सभी लेन-देन केवल एक पंक्ति सम्मिलित करते हैं।
यदि आपके पास है तो गतिरोध हो सकता है
- डेटाबेस से एक से अधिक कनेक्शन (जाहिर है)
- कोई भी ऑपरेशन जिसमें आंतरिक रूप से एक से अधिक लॉक शामिल हों।
जो स्पष्ट नहीं है, वह यह है कि ज्यादातर समय, एक पंक्ति डालने या अद्यतन में एक से अधिक लॉक शामिल होते हैं। इसका कारण यह है कि इन्सर्ट/अपडेट के दौरान सेकेंडरी इंडेक्स को भी लॉक करना पड़ता है।
चयन लॉक नहीं होंगे (यह मानते हुए कि आप डिफ़ॉल्ट आइसोलेशन मोड का उपयोग कर रहे हैं, और अद्यतन के लिए उपयोग नहीं कर रहे हैं) इसलिए वे इसका कारण नहीं हो सकते।
इंजन दिखाएँ INNODB स्थिति आपका मित्र है। यह आपको गतिरोधों के बारे में (निश्चित रूप से बहुत भ्रमित करने वाली) जानकारी का एक गुच्छा देगा, विशेष रूप से, सबसे हाल ही में।
- आप गतिरोध को पूरी तरह से समाप्त नहीं कर सकते, वे उत्पादन में होते रहेंगे (यहां तक कि परीक्षण प्रणालियों पर भी अगर उन्हें ठीक से तनाव दिया जाए)
- बहुत कम गतिरोध का लक्ष्य रखें। यदि आपके लेन-देन का 1% गतिरोध है, तो संभवतः यह बहुत अधिक है।
- यदि आप इसके निहितार्थों को पूरी तरह से समझते हैं, तो अपने लेन-देन के लेन-देन अलगाव स्तर को रीड-कमिटेड में बदलने पर विचार करें
- सुनिश्चित करें कि आपका सॉफ़्टवेयर गतिरोध को ठीक से संभालता है।