2010-04-28 12 views
23

यदि आप लंबे समय तक चलने वाली क्वेरी को मार देते हैं तो क्या होता है? क्या परिवर्तन क्वेरी बस वापस आ जाएगी? यह कितना समय ले सकता है (उस समय के अनुपात के रूप में यह पहले से चल रहा है)?यदि आप लंबे समय तक चलने वाली क्वेरी को मार देते हैं तो क्या होता है?

क्या होगा यदि उस क्वेरी को किसी अन्य सर्वर पर दोहराया जा रहा है? अन्य सर्वर पर प्रक्रिया को मारने से मूल सर्वर की बदलती क्वेरी वापस आ जाएगी?

हम mysql

+27

हाहा, मुझे खेद है, मेरे पास एक मॉनिटर के चारों ओर घूमने वाले इंजीनियरों के समूह की एक उल्लसित मानसिक छवि है, जो इस पोस्ट पर अपने पसीने वाले brows के माध्यम से घूमती है - बस एक उत्तर की प्रतीक्षा कर रही है - जबकि पृष्ठभूमि में एक MySQL सर्वर प्रारंभ होता है धूम्रपान करते हैं। –

+0

हाहा, हमें क्वेरी समाप्त होने तक इसे धूम्रपान करने देना पड़ा। लेकिन अगली बार जानना अच्छा लगेगा .. भगवान forbid –

+0

ठीक है, मैं यहाँ हूँ। मैं इस मामले में एक प्रतिलिपि बनाई गई थी, इसलिए इसे रोकना ठीक था, लेकिन इसमें पसीना शामिल था। भगवान का शुक्र है कि यह उत्पादन में नहीं था लेकिन लेखन-लॉक कुख्यात है। – Aki

उत्तर

12

यह निर्भर करता है कि आप क्या कर रहे हैं। यदि आप an alter table...add indexInnoDB तालिका (MyISAM के बारे में इतना निश्चित नहीं हैं) पर आदेश an alter table...add index चला रहे हैं, तो यह केवल रन और रन करेगा क्योंकि यह पूरे डार्न टेबल लॉक-स्टॉक-एंड-बैरल को प्रतिलिपि बनाता है: यदि यह "कॉपी" के बीच में है temp टेबल करने के लिए "तो यह काफी ज्यादा अस्थिर है।

See here:

ज्यादातर मामलों में, मूल तालिका की अस्थायी प्रतिलिपि बनाने द्वारा टेबल काम करता है बदल देते हैं। प्रतिलिपि प्रतिलिपि पर की गई है, और फिर मूल तालिका हटा दी गई है और नया का नाम बदला गया है। जबकि वैकल्पिक तालिका निष्पादित है, मूल तालिका अन्य सत्रों द्वारा पठनीय है। अपडेट और नई तालिका तैयार होने तक तालिका में लिखने को रोक दिया गया है, और फिर स्वचालित रूप से नई तालिका को बिना किसी असफल अपडेट के रीडायरेक्ट कर दिया गया है।

+2

ऐसा लगता है कि हमारा मामला एक था जहां "कोई अस्थायी तालिका जरूरी नहीं है" - लेकिन ऐसा लगता है कि हमारी टेबल अभी भी लॉक हो गई है, हमारे खुले कनेक्शन बढ़ गए हैं, और हमारे पास 5 से 10 मिनट का आउटेज था। अगर हम एक ऐसी क्वेरी को मार देते हैं जो * प्रतिलिपि नहीं बनाता है ... तो क्या? –

+0

@ बीटी: कोई अस्थायी तालिका कैसे बनाई गई, आपका विशिष्ट मामला क्या है? – Aki

+2

बीटीडब्ल्यू, मैंने प्रतिलिपि के दौरान अस्थायी तालिका में प्रक्रिया को मार दिया, यह लिखने-लॉक को हटा दिया और डेटा अभी भी वहां और पहुंच योग्य था। मुझे नहीं पता कि अस्थायी प्रतिलिपि कहाँ गई थी। – Aki

0

क्या होगा यदि उस क्वेरी को किसी अन्य सर्वर पर दोहराया जा रहा है?

एल्टर को उस सर्वर पर भी संबंधित प्रभावों के साथ निष्पादित किया जाएगा।

अन्य सर्वर पर प्रक्रिया को मारने से मूल सर्वर की बाहरी क्वेरी को वापस कर दिया जाएगा?

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

एक बार एक एल्टर प्रतिकृति लॉग में प्रवेश करता है, तो आपको या तो इसे हर जगह चलाने देना है, या इसे हर जगह मारना है।

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

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