2012-09-03 9 views
7

कुछ अवसरों, जब कई बैक-एंड प्रक्रिया एक ही समय में चलाने के लिए होता है पर (कतार प्रबंधन, कुछ और है मैं इसे इस तरह हल कर सकते हैं, लेकिन इस सवाल यहाँ नहीं है), मैं General error: 1205 Lock wait timeout exceeded; try restarting transaction ROLLING BACKकुछ प्रश्नों को प्राथमिकता कैसे दें?

मिल जिस प्रक्रिया में कम प्राथमिकता है वह वह है जो टेबल को लॉक करता है, इस तथ्य के कारण कि उसने उच्च प्राथमिकता से कुछ मिनट पहले शुरू किया था।

मैं पहले से चल रही प्रक्रिया पर किसी प्रश्न को प्राथमिकता कैसे दे सकता हूं?

आशा है कि यह पर्याप्त स्पष्ट था।

उत्तर

12

एक बार एक क्वेरी निष्पादन शुरू हो जाने के बाद इसे रोका/बाधित नहीं किया जा सकता है। इसका एकमात्र अपवाद डीबी प्रशासन स्तर पर है जहां आप अनिवार्य रूप से क्वेरी को रोकने के लिए मजबूर कर सकते हैं (इसके बारे में सोचें जैसे खिड़कियों में चल रही प्रक्रिया को मारना)। हालांकि आप ऐसा नहीं करना चाहते हैं, तो इसे भूल जाओ।

आपका सबसे अच्छा विकल्प कम प्राथमिकता वाले चुने हुए ऑपरेशन का उपयोग करना होगा। असल में इसका अर्थ यह है कि यदि कम प्राथमिकता पर क्वेरी निष्पादित करने में बहुत अधिक समय ले रही है, तो उन तरीकों के बारे में सोचें जिनमें आप अनाथ डेटा या डेटाबेस में अवैध डेटा बनाये बिना तेज़ी से इसे विभाजित कर सकते हैं।

एक बहुत ही बुनियादी उपयोग केस एक नई डालने की कल्पना करेगा जिसमें 10,000 नई पंक्तियां शामिल होंगी। सम्मिलित करें "सम्मिलित करें" ताकि यह छोटे डेटा सेट (यानी 500 एक समय में) के साथ कई बार सम्मिलित हो जाए, प्रत्येक व्यक्ति अधिक तेज़ी से पूरा हो जाएगा, और इसलिए किसी भी गैर-निम्न प्राथमिकता संचालन को अधिक समय पर निष्पादित करने की अनुमति दें ।

कैसे

कुछ की स्थापना के रूप में कम प्राथमिकता LOW_PRIORITY ध्वज में जोड़ने के रूप में सरल है।

INSERT LOW_PRIORITY INTO xxx(a,b,c,) VALUES()

UPDATE LOW_PRIORITY xxx SET a=b

DELETE LOW_PRIORITY FROM xxx WHERE a="value"

+0

ठीक है ... मैं कैसे एक प्रश्न कम प्राथमिकता को चिह्नित करना होगा (यू जवाब देने के लिए इस जोड़ सकते हैं?) –

+1

कहा, तुम भूल न भी करने की जरूरत है ऑपरेशन को काम करने के लिए छोटे बिट्स में घुमाएं, एक बार पूछताछ शुरू हो जाने के बाद इसे अन्य परिचालनों को पूरा करने के लिए समाप्त होना चाहिए। कम प्राथमिकता जैसे ही कम प्राथमिकता क्वेरी समाप्त होती है और अगली कम प्राथमिकता (यानी चंकित क्वेरी का दूसरा) निष्पादित होने से पहले कम प्राथमिकता अन्य सामान्य/उच्च प्राथमिकता वाले प्रश्नों को निष्पादित करने की अनुमति देगी। – Lee

+1

@Lee केवल एक चीज जो मैं जोड़ूं वह 'low_priority_updates' विकल्प के बारे में जानकारी है http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_low_priority_updates –

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