2012-09-15 19 views
11

अचानक हम इस तरह के रूप में सक्रिय रिकॉर्ड के माध्यम से ताला त्रुटियों हो रही है (संबंधित कोड में कोई परिवर्तन के बिना):मैं रेल के साथ MySQL लॉक टाइमआउट त्रुटियों का निवारण कैसे कर सकता हूं?

ActiveRecord::StatementInvalid: Mysql2::Error: Lock wait timeout exceeded; 
try restarting transaction: UPDATE `items` SET `state` = 'reserved', `updated_at` = '2012-09-15 17:58:21' WHERE `items`.`id` = 248220 

और

ActiveRecord::StatementInvalid: Mysql2::Error: Lock wait timeout exceeded; 
try restarting transaction: DELETE FROM `sessions` WHERE `sessions`.`id` = 41997883 

हम में हमारे अपने लेन-देन नहीं कर रहे हैं या तो इन मॉडलों में से, इसलिए केवल लेन-देन रेल में बने होते हैं। यातायात या अनुरोध मात्रा में वृद्धि नहीं हुई है।

इन त्रुटियों को जब एक 'नई' क्वेरी एक बंद मेज पर चलने की कोशिश करता है और इंतजार करना पड़ता है दिखाई देते हैं, हम कैसे देख पा रहे हैं क्या इसके लिए इंतज़ार कर रहा है? हम कैसे पता लगा सकते हैं कि हमारे कोड का कौन सा हिस्सा प्रश्न जारी कर रहा है जो विस्तारित अवधि के लिए तालिकाओं को लॉक करता है?

जहां हम देख सकते हैं या यह कैसे के कारण की जांच करने के लिए पर कोई भी विचार?

+0

तुम इतनी तरह की खाई को लॉक को निष्क्रिय करने के दृष्टिकोण के लिए जा रहा कोशिश कर सकते: innodb_locks_unsafe_for_binlog = 1, यह कुछ प्रेत रिकॉर्ड हालांकि कारण हो सकता है। इसके बारे में अधिक [यहां] पढ़ें (http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_locks_unsafe_for_binlog) – Yarneo

+0

क्या अंतर्निहित डीबी इंजन है? यदि इसका आईएनएनओडीबी आप 'innodb status show' पोस्ट कर सकता है? – ethrbunny

+0

दिखाएं इंजन INNODB स्थिति https://gist.github.com/3758910 – chrishomer

उत्तर

3

pt-गतिरोध-लकड़हारा पर एक नजर डालें, जबकि सीधे रेल से संबंधित नहीं है, तो आप गतिरोध उत्पन्न हो रही के बारे में जानकारी की एक पर्याप्त राशि देना चाहिए। http://www.mysqlperformanceblog.com/2012/09/19/logging-deadlocks-errors/

उपकरण बहुत ही सरल और उपयोगी है:

http://www.percona.com/doc/percona-toolkit/2.1/pt-deadlock-logger.html

कुछ उदाहरण के साथ एक अच्छा writeup है। यह शो इंजन इननोड स्थिति के आउटपुट पर नज़र रखता है और फाइलों या टेबल पर नए डेडलॉक्स लॉग करता है जिसे हम बाद में समीक्षा कर सकते हैं। चलो देखते हैं कि यह एक उदाहरण के साथ कैसे काम करता है।

लेख को समझाने के लिए इस तरह के शामिल प्रश्नों, जो होस्ट करता है, धागा आईडी, आदि के रूप गतिरोध के बारे में जानकारी के लिए लॉग इन कर सकते हैं कि

मैं भी करने के लिए टिप्पणी के साथ उपसर्ग प्रश्नों का यह उपयोगी पाया है पर चला जाता है ट्रैकिंग, जैसे फ़ाइल या मॉड्यूल, फ़ंक्शन, यहां तक ​​कि उपयोगकर्ता को अनुमति दें। प्रश्न टिप्पणियां आम तौर पर इस तरह के निदान उपकरण के लिए सभी तरह से पारित हो जाती हैं, और कोड के किन हिस्सों को ट्रैक करने में मदद कर सकती हैं और किस परिस्थितियों में डेडलॉक्स पैदा हो रहे हैं।

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