मेटा डेटा लॉक की प्रतीक्षा करते हुए तालिका को दिखाने में असमर्थ है


11

हम एक तालिका को छोड़ने का प्रयास कर रहे हैं, लेकिन यह लटका हुआ है, और जब हम 'SHOW PROCESSLIST' कमांड देखते हैं, तो यह 'मेटा डेटा लॉक की प्रतीक्षा' के रूप में दिखाई देता है। यहां तक ​​कि हम उस विशेष टेबल पर कोई भी ऑपरेशन करने में असमर्थ हैं। क्या कोई इसे हल करना जानता है?

जवाबों:


8

यदि एक InnoDB टेबल को SELECT या DML (INSERT, UPDATE, DELETE) के माध्यम से एक्सेस किया जा रहा है, तो आपको मेटाडेटा लॉक की सही उम्मीद करनी चाहिए।

मेटाडेटा लॉकिंग पर MySQL प्रलेखन के अनुसार :

लेन-देन क्रमबद्धता सुनिश्चित करने के लिए, सर्वर को एक सत्र में डेटा परिभाषा भाषा (DDL) स्टेटमेंट करने के लिए एक सत्र की अनुमति नहीं देनी चाहिए, जो किसी अन्य सत्र में अपूर्ण लेनदेन में उपयोग किया जाता है। सर्वर लेन-देन के भीतर उपयोग की जाने वाली तालिकाओं पर मेटाडेटा ताले प्राप्त करके और लेन-देन समाप्त होने तक उन तालों के विचलन को हटाकर इसे प्राप्त करता है। एक मेज पर मेटाडेटा लॉक तालिका की संरचना में परिवर्तन को रोकता है। इस लॉकिंग एप्रोच का निहितार्थ है कि लेन-देन समाप्त होने तक एक सत्र के भीतर लेनदेन करने वाली तालिका का उपयोग डीडीएल बयानों में अन्य सत्रों द्वारा नहीं किया जा सकता है।

यह कहा जा रहा है, आपको यह निर्धारित करना चाहिए कि एक और डीबी सत्र मेज पर ताले लगा रहा है या नहीं। यदि इस तरह का सत्र एक अपूर्ण लेन-देन है, तो वहाँ है जहाँ पकड़ हो सकती है।

आप बस जल्दी से डिस्कस्पेस की जरूरत है, तो आप चला सकते हैं TRUNCATE TABLE

सुझाव

निम्नलिखित के रूप में इसे छोड़ने का प्रयास करने से पहले तालिका का नाम बदलने का प्रयास करें:

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;

सुझाव हमारे काम नहीं आया। इसके बजाय हमें "टेबल मेटाडाटा लॉक की प्रतीक्षा" के लिए TABLE fooनाम बदलेंfootodrop
मोतिन

@ सभी का मतलब है कि एक या एक से अधिक DB कनेक्शन अभी भी तालिका तक पहुंच रहे थे foo। एक बार जब वे सभी कनेक्शन हो गए, तो ALTER TABLEआगे बढ़ सकते हैं।
रोलैंडमाइसीडीडीबीए

7

आपको यह पता लगाना चाहिए कि किस क्वेरी के कारण लेनदेन लॉक होता है:

SHOW ENGINE INNODB STATUS

और नाम का एक सेक्शन देखें TRANSACTION। बाद में आपको डेटाबेस छोड़ने के लिए उस क्वेरी को मारना चाहिए।

संदर्भ: मुझे कैसे पता चलेगा कि कौन सा लेन-देन "टेबल मेटाडेटा लॉक" की प्रतीक्षा कर रहा है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.