2010-01-25 21 views
11

का कारण बन रहा है यदि निम्न स्थिति mysql में एक बग है?माइस्क्ल लेनदेन लॉक के लिए इंतजार कर रहा है जो पहले से ही दिया गया है .. यह डेडलॉक

Mysql संस्करण: mysql.x86_64 5.0.77-4.el5_4.1

कर्नेल: लिनक्स box2 2.6.18-128.el5 # 1 SMP बुध जनवरी 21 10:41:14 ईएसटी 2009 x86_64 x86_64 x86_64 जीएनयू/लिनक्स

------------------------ 
LATEST DETECTED DEADLOCK 
------------------------ 
100125 4:24:41 
*** (1) TRANSACTION: 
TRANSACTION 0 210510625, ACTIVE 155 sec, process no 28125, OS thread id 1243162944 starting index read 
mysql tables in use 1, locked 1 
LOCK WAIT 5 lock struct(s), heap size 1216, undo log entries 1 
MySQL thread id 162928579, query id 527252744 box22 172.16.11.105 user updating 
delete from user_grid_items where user_id = 669786974 and START_X = 45 and START_Y = 65 
*** (1) WAITING FOR THIS LOCK TO BE GRANTED: 
RECORD LOCKS space id 0 page no 61372 n bits 328 index `PRIMARY` of table `gamesutra_beta/user_grid_items` trx id 0 210510625 lock_mode X locks rec but not gap waiting 
Record lock, heap no 127 PHYSICAL RECORD: n_fields 10; compact format; info bits 0 
0: len 8; hex 0000000027ec235e; asc  ' #^;; 1: len 4; hex 0000002d; asc -;; 2: len 4; hex 00000041; asc A;; 3: len 6; hex 00000b561243; asc V C;; 4: len 7; hex 80000040070110; asc @ ;; 5: len 23; hex 474949445f414e494d414c535f53515549445f50494e4b; asc GIID_ANIMALS_SQUID_PINK;; 6: len 4; hex cb59f060; asc Y `;; 7: len 4; hex 4b59f060; asc KY `;; 8: len 4; hex 80000000; asc  ;; 9: len 1; hex 80; asc ;; 

*** (2) TRANSACTION: 
TRANSACTION 0 210505911, ACTIVE 555 sec, process no 28125, OS thread id 1184323904 starting index read, thread declared inside InnoDB 500 
mysql tables in use 1, locked 1 
5 lock struct(s), heap size 1216, undo log entries 1 
MySQL thread id 162924258, query id 527252762 box22 172.16.11.105 user updating 
delete from user_grid_items where user_id = 669786974 and START_X = 45 and START_Y = 65 
*** (2) HOLDS THE LOCK(S): 
RECORD LOCKS space id 0 page no 61372 n bits 328 index `PRIMARY` of table `gamesutra_beta/user_grid_items` trx id 0 210505911 lock mode S locks rec but not gap 
Record lock, heap no 127 PHYSICAL RECORD: n_fields 10; compact format; info bits 0 
0: len 8; hex 0000000027ec235e; asc  ' #^;; 1: len 4; hex 0000002d; asc -;; 2: len 4; hex 00000041; asc A;; 3: len 6; hex 00000b561243; asc V C;; 4: len 7; hex 80000040070110; asc @ ;; 5: len 23; hex 474949445f414e494d414c535f53515549445f50494e4b; asc GIID_ANIMALS_SQUID_PINK;; 6: len 4; hex cb59f060; asc Y `;; 7: len 4; hex 4b59f060; asc KY `;; 8: len 4; hex 80000000; asc  ;; 9: len 1; hex 80; asc ;; 

*** (2) WAITING FOR THIS LOCK TO BE GRANTED: 
RECORD LOCKS space id 0 page no 61372 n bits 328 index `PRIMARY` of table `gamesutra_beta/user_grid_items` trx id 0 210505911 lock_mode X locks rec but not gap waiting 
Record lock, heap no 127 PHYSICAL RECORD: n_fields 10; compact format; info bits 0 
0: len 8; hex 0000000027ec235e; asc  ' #^;; 1: len 4; hex 0000002d; asc -;; 2: len 4; hex 00000041; asc A;; 3: len 6; hex 00000b561243; asc V C;; 4: len 7; hex 80000040070110; asc @ ;; 5: len 23; hex 474949445f414e494d414c535f53515549445f50494e4b; asc GIID_ANIMALS_SQUID_PINK;; 6: len 4; hex cb59f060; asc Y `;; 7: len 4; hex 4b59f060; asc KY `;; 8: len 4; hex 80000000; asc  ;; 9: len 1; hex 80; asc ;; 

*** WE ROLL BACK TRANSACTION (2) 
------------ 
+0

क्या आप इस समस्या का समाधान ढूंढ पाए थे? –

+0

यहां इसी तरह की समस्या है। क्या आपको एक समाधान मिला? –

+0

आवश्यक दो ताले अलग हैं (मोड अलग हैं, पहले से ही लॉक मोड मोड 'एस' साझा/पढ़ा गया है और 'एक्स' अनन्य/लिखने के लॉक के लिए इसकी प्रतीक्षा है)। टीपीओ समझें http://dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html – Zimbabao

उत्तर

-4

उपयोग SHOW ENGINE INNODB STATUS नवीनतम गतिरोध का कारण निर्धारित करने के लिए। इससे आपको डेडलॉक्स से बचने के लिए अपने आवेदन को ट्यून करने में मदद मिल सकती है।

हमेशा लेन-देन को फिर से जारी करने के लिए तैयार रहें यदि यह डेडलॉक के कारण विफल रहता है। डेडलॉक्स खतरनाक नहीं हैं। बस पुनः प्रयास करें।

+2

यह कोई जवाब नहीं है, बल्कि 14.2.7.9 का पुनर्जन्म है MySQL मैन्युअल में https://dv.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html) में डेडलॉक्स के साथ कैसे सामना करें। इससे भी बदतर, यह ओपी के सवाल को हल करने के लिए कुछ भी नहीं करता है। अगर मेरे पास इसे कम करने का प्रतिनिधि था, तो मैं चाहता था। – dohpaz42

1

मैंने कुछ समय पहले पढ़ा था, और यह सुनिश्चित नहीं है कि आप परिणाम के रूप में क्या चल रहे हैं या नहीं ... वर्तमान बनाम लेनदेन के कोड को देखे बिना यह क्या विरोधाभासी है।

अपने लेनदेन को संसाधित करते समय, आपको हमेशा एक ही अनुक्रम में लॉकिंग करने की कोशिश करनी चाहिए ... ऑर्डर/ऑर्डर विवरण/भुगतान प्रणाली के लिए, उदाहरण के रूप में सूचीबद्ध सभी क्रम में गतिविधियों को सूचीबद्ध करें। यदि आपके पास एक और प्रक्रिया है जो "ऑर्डर विवरण/ऑर्डर" के क्रम में अपने लेनदेन की कोशिश करती है, जो डेडलॉक का कारण बन सकती है।

एक लेनदेन ऑर्डर # लॉक कर रहा है, फिर ऑर्डर विवरण काम कर रहा है। ऑर्डर हेडर प्राप्त करने का प्रयास कर रहे अन्य लेनदेन पहले ऑर्डर विवरण लॉक कर रहे हैं।

HTH

6

कभी कभी शो इंजन InnoDB स्थिति को समझने के लिए मुश्किल हो सकता है क्योंकि यह केवल लेन-देन में मौजूदा बयान दर्शाता है। यह उन लेन-देन को नहीं दिखाता है जो पहले उसी लेनदेन में हुए थे, जो वास्तव में होने वाले ताले हासिल कर चुके थे।

आपके मामले में, लेनदेन 2 में पिछले बयान में प्रश्न में पंक्ति पर साझा लॉक प्राप्त हुआ।

फिर, लेनदेन 1 ने एक ही पंक्ति पर एक विशेष लॉक प्राप्त करने का प्रयास किया, और साझा लॉक को हटाने के लिए खुशी से इंतजार कर रहा है।

फिर, दूसरे कथन में लेनदेन 2 ने उसी पंक्ति पर एक विशेष लॉक प्राप्त करने का प्रयास किया। क्लासिक डेडलॉक। न तो लेनदेन खत्म हो सकता है।

इस तरह के डेडलॉक से बचने में मदद करने के लिए एक समाधान साझा लॉक प्राप्त करने वाले बयान से पहले SELECT FOR UPDATE कथन के साथ लेनदेन 2 में पंक्ति पर एक विशेष लॉक पकड़ना होगा।

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

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