2011-08-03 18 views
7

के बाद MySQL में लेन-देन को पुनरारंभ करना मुझे अपने MySQL में डेडलॉक का सामना करना पड़ रहा है। लेन-देन को स्वचालित रूप से लेन-देन को फिर से शुरू करने के लिए मैं MySQL को कैसे कॉन्फ़िगर कर सकता हूं?डेडलॉक

उत्तर

6

आप ऐसा नहीं कर सकते स्वचालित रूप से गतिरोध के रूप में हुई है, क्योंकि दो लेनदेन एक ही डेटा संशोधित करने के लिए कोशिश कर रहे थे। यदि आप जानते हैं जो कि वही कथन फिर से प्रयास कर रहे हैं, तो यह सही काम होगा, आपको इसे अपने एप्लिकेशन में लागू करने की आवश्यकता है।

हालांकि डेटाबेस होने से स्वचालित रूप से गैर जिम्मेदार होगा, क्योंकि ऐसे मामलों में भी हो सकता है जहां आपके आवेदन को पहले डेटाबेस में नई स्थिति को देखने की आवश्यकता हो, संभावित रूप से संशोधित बयान जारी करने से पहले, यदि कोई भी हो ।

+0

क्या आप रोल किए गए बैक लेनदेन को पुनः प्रयास करने के लिए जावा (हाइबरनेट के साथ) में कुछ क्लाइंट साइड नमूना कोड पोस्ट कर सकते हैं। –

3

आम तौर पर, आपको अपने आवेदन लिखना चाहिए ताकि वे हमेशा एक लेनदेन को फिर से जारी करने के लिए तैयार हों, यदि यह डेडलॉक के कारण वापस लुढ़का जाता है।

http://dev.mysql.com/doc/refman/5.1/en/innodb-deadlocks.html

मैनुअल पता चलता है कि इस तरह का कोई विन्यास विकल्प मौजूद है।

+0

क्या आप रोल किए गए बैक लेनदेन को पुनः प्रयास करने के लिए जावा (हाइबरनेट के साथ) में कुछ क्लाइंट साइड नमूना कोड पोस्ट कर सकते हैं? –

0

ठीक है, आप नहीं कर सकते हैं और यह समझ में नहीं आता है। डेडलॉक से निपटने के लिए यह आपके आवेदन पर निर्भर है और यह कैसे किया जाता है आपके व्यापार तर्क पर बहुत निर्भर करता है, उदा। अपवाद को पकड़ने, कुछ सेकंड प्रतीक्षा करें, एक्स बार पुन: प्रयास ...

3

एक सौदे को पुनः प्रारंभ करने का अर्थ है:

  • (वैकल्पिक) आरंभ एक नया डेटाबेस कनेक्शन संभाल;
  • पहला फ़ंक्शन/लाइन कोड निष्पादित करें जो एक नया लेनदेन शुरू करता है और commit तक पूरे निष्पादन पथ को पुनः प्रयास करता है।

क्योंकि डेटाबेस इंजन संभवतः प्रश्नों होगा जिसके बाद गतिरोध हुई बाद मार दिया पता नहीं कर सकते हैं, यह आप के लिए पूरी बात पुन: प्रयास नहीं कर सकता (करने के लिए आवेदन तर्क जो शायद के आधार पर विभिन्न प्रश्नों पर अमल होगा हो सकता है का उल्लेख नहीं नया बदल दिया डेटाबेस डेटा)।

संबंधित मुद्दे