2011-04-27 9 views
9

मान लें कि मेरे पास एक क्वेरी है जो मेरे SQL-Server डेटाबेस पर भेजी जाती है, इसमें 30 सेकंड से अधिक समय लगता है, और मेरा प्रोग्राम SQL क्वेरी टाइमआउट अपवाद फेंकता है। क्या क्वेरी अभी भी मेरे डेटाबेस पर चिपक रही है या जैसे ही अपवाद फेंक दिया जाता है?यदि यह टाइम्स आउट हो तो एक प्रश्न के साथ क्या होता है?

उत्तर

14

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

स्रोत There's no such thing as a query timeout...

1

यदि आपको SQL टाइमआउट मिलता है तो SQL बंद हो गया है, हालांकि वेब एप्लिकेशन समय निकाल सकते हैं और SQL क्वेरी जारी रख सकती है।

1

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

Source

+0

प्रश्न में 30 सेकंड का उल्लेख इंगित करता है कि ओपी कमांड टाइमआउट (क्लाइंट से) के बारे में पूछ रहा है मेमोरी अनुदान टाइमआउट या लॉक टाइमआउट नहीं। –

+0

मेमोरी अनुदान टाइमआउट एडीओ.Net क्लाइंट अनुरोध टाइमआउट से एक अलग बात है, जो 30 सेकंड है ओपी –

-3

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

उदाहरण:

BEGIN TRAN 

UPDATE authors 
    SET au_fname = 'John' 
WHERE au_id = '172-32-1176' 

UPDATE authors 
    SET au_fname = 'Marg' 
WHERE au_id = '213-46-8915' 

COMMIT TRAN 
+0

का जिक्र कर रहा है इस मामले में, कनेक्शन अभी भी खुला है, लेकिन डेटाबेस भारी लोड के तहत है, जिससे प्रश्न एक लंबा समय लेने के लिए। – sooprise

+0

क्या आप कनेक्शन टाइमआउट या कुछ के बारे में बात कर रहे हैं? यह कमांड टाइमआउट से अलग है। –

+0

मेरा मुद्दा यह है कि यदि वह किसी सर्वर से कनेक्शन कर रहा है और उसे यह सुनिश्चित करने की ज़रूरत है कि वे वास्तविक डेटाबेस पर फेंक जाएंगे, तो लेनदेन का उपयोग करने से त्रुटियों को रोकने में मदद मिलेगी जो कभी-कभी टाइमआउट के – RobertPitt

2

जब ग्राहक फैसला करता है कि आदेश काफी देर तक चलने के बाद, यह जारी करता है एक "निरस्त करें"। क्वेरी बस डेटाबेस में चलना बंद कर देता है।

कोई भी कैच ब्लॉक नहीं मारा जाएगा, लेनदेन खुले रहेंगे और इसके बाद भी लॉक आवंटित रहेंगे, भले ही कनेक्शन बंद हो क्योंकि "बंद" का मतलब है "कनेक्शन पूल पर वापस जाना"।

यदि आपको लगता है कमान टाइमआउट का एक बहुत तो SET XACT_ABORT ON (and this too) कि होगा रिलीज ताले और रोलबैक लेनदेन उपयोग करने पर विचार। या कोड को ठीक करें ...

+0

पर एक लेनदेन खोला जाएगा आपने कहा "क्वेरी बस डेटाबेस में चलना बंद कर देती है"; मार्टिन स्मिथ के जवाब में कहा गया है, "यह वर्तमान में निष्पादित क्वेरी को एक डाइम पर नहीं रोकता है - सर्वर अगले उपलब्ध अवसर पर कनेक्शन के लिए जो भी कर रहा था, उसे रोकता है"। क्या सही है? – simonp

+0

वही परिणाम, अलग भाषा। सर्वर लोड, इन-फ्लाइट आईओ, जो भी डब्ल्यूएआईटी खेल रहे हैं, के आधार पर मेरा "स्टॉप" देरी हो सकती है – gbn

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

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