मेरे पास एक बड़ा उत्पादन वेब-एप्लिकेशन (ग्लासफ़िश 3.1 + MySQL 5.5) है। सभी टेबल InnoDB हैं। एक बार कई दिनों के आवेदन पूरी तरह से लटका हुआ है।MySQL InnoDB टेबल-स्तरीय ताले के लिए प्रतीक्षा पर लटकता है
सबसे लंबे समय तक 'टाइम' के साथupdate user<br>
set user.hasnewmessages = NAME_CONST('in_flag',_binary'\0' COLLATE 'binary')
where user.id = NAME_CONST('in_uid',66381)
insert into exchanges_itempacks
set packid = NAME_CONST('in_packId',332149), type = NAME_CONST('in_type',1), itemid = NAME_CONST('in_itemId',23710872)
प्रश्नों हैं: SHOW FULL PROCESSLIST
अलग टेबल पर कई सरल डालने या अद्यतन प्रश्नों लेकिन सभी के होने का दर्जा
तालिका स्तर ताला
उदाहरण के लिए प्रतीक्षा कर रहा है पता चलता टेबल-स्तरीय लॉक के लिए भी इंतजार कर रहा है। कृपया यह पता लगाने में सहायता करें कि क्यों MySQL स्तर लॉक प्राप्त करने का प्रयास करता है और इन सभी तालिकाओं को लॉक कर सकता है। इनो डीबी लॉकिंग के बारे में सभी लेखों का कहना है कि यदि आप ऐसा करने के लिए मजबूर नहीं करते हैं तो यह इंजन कोई टेबल लॉकिंग का उपयोग नहीं करता है।
मेरे my.cnf
इस है:
innodb_flush_log_at_trx_commit = 0
innodb_support_xa = 0
innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode=2
द्विआधारी लॉग बंद है। मेरे पास "लॉक टेबल" या अन्य स्पष्ट लॉकिंग कमांड नहीं हैं। लेनदेन READ_UNCOMMITED
हैं।
SHOW ENGINE INNODB STATUS
उत्पादन: http://avatar-studio.ru:8080/ph/imonout.txt
आपके पास "READ_UNCOMMITED" पर अलगाव स्तर क्यों सेट है। यह एक गंदे मोड है और मैं इसे कभी भी उत्पादन सर्वर पर सेट करने की अनुशंसा नहीं करता। –
यहां कुछ उपयोगी जानकारी हो सकती है: [इनो डीबी लॉक मोड] (http://dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html), विशेष रूप से इरादे ताले और बाद में दस्तावेज़ में वर्णित डेडलॉक्स के संभावित कारण। अंत में उपयोगकर्ता टिप्पणियों को भी ध्यान दें। – Mike