SQL सर्वर के लिए कनेक्शन टाइमआउट


109

क्या मैं कनेक्शन स्ट्रिंग को संशोधित करके टाइमआउट बढ़ा सकता हूं web.config?


7
इसे ऐसे न पढ़ें जैसे मैंने सोचा था कि टाइमआउट क्वेरी निष्पादन को नियंत्रित करेगा - यह केवल सर्वर से कनेक्ट होने का टाइमआउट नहीं है - "कनेक्टिंग टाइमआउट" एक बेहतर नाम होगा। देखें stackoverflow.com/a/7976867/409856
downwitch

जवाबों:


213

हां, आप ;Connection Timeout=30अपने कनेक्शन स्ट्रिंग में संलग्न कर सकते हैं और अपनी इच्छानुसार मूल्य निर्दिष्ट कर सकते हैं।

Connection Timeoutप्रॉपर्टी में सेट किया गया टाइमआउट मान कुछ ही सेकंड में व्यक्त किया गया समय है । यदि यह गुण सेट नहीं है, तो कनेक्शन के लिए टाइमआउट मान डिफ़ॉल्ट मान (15 सेकंड) है।

इसके अलावा, टाइमआउट मान सेट करते हुए 0, आप यह अनुमान लगा रहे हैं कि कनेक्ट करने का आपका प्रयास अनंत समय का इंतजार कर रहा है। जैसा कि प्रलेखन में वर्णित है, यह कुछ ऐसा है जिसे आपको अपने कनेक्शन स्ट्रिंग में सेट नहीं करना चाहिए:

0 का मान किसी सीमा को इंगित नहीं करता है, और एक कनेक्शनस्ट्रीमिंग में बचा जाना चाहिए क्योंकि कनेक्ट करने का प्रयास अनिश्चित काल तक प्रतीक्षा करता है।


4
क्या यह समय मिनट या सेकंड में है?
user1

1
@ user1 "प्रयास को समाप्त करने और त्रुटि उत्पन्न करने से पहले सर्वर से कनेक्शन के लिए प्रतीक्षा करने के लिए (सेकंड में) की अवधि।"
सैंटक्स

5
FYI करें: कनेक्शन टाइमआउट = 0 अनंत है।
अब्दुल सबूर

क्या आप इसके लिए उदाहरण दे सकते हैं? जब मैं कुछ प्रक्रिया प्रोग्राम रिटर्न टाइमआउट त्रुटि करता हूं, तो मैं EF6 का उपयोग कर रहा हूं, मेरी तालिका में 3 मिलियन डेटा है ... नोट: मैं तालिका में अनुक्रमण का उपयोग कर रहा हूं
saulyasar

4
@saulyasar यह कॉनडेक्ट टाइम आउट है, न कि कमेंड टाइमआउट। कनेक्शन टाइमआउट कब तक यह SQL सर्वर से कनेक्ट करने का प्रयास करेगा। आप COMMAND टाइमआउट की जांच करना चाहते हैं, जो कि समय से पहले एक प्रक्रिया या कथन कितनी देर तक चलेगा।
ग्रेनडाकोड

32

हममम ...

जैसा कि डारिन ने कहा, आप एक उच्च कनेक्शन टाइमआउट मान निर्दिष्ट कर सकते हैं, लेकिन मुझे संदेह है कि यह वास्तव में मुद्दा है।

जब आपको कनेक्शन टाइमआउट मिलता है, तो यह आमतौर पर निम्न में से एक के साथ एक समस्या है:

  1. नेटवर्क कॉन्फ़िगरेशन - आपके वेब सर्वर / देव बॉक्स और SQL सर्वर के बीच धीमा कनेक्शन। समय-सीमा बढ़ाना इसे सही कर सकता है, लेकिन अंतर्निहित समस्या की जांच करना बुद्धिमानी होगी।

  2. संबंध तार। मैंने ऐसे मुद्दों को देखा है जहां एक गलत उपयोगकर्ता नाम / पासवर्ड किसी कारण से, वास्तविक त्रुटि के बजाय एक टाइमआउट त्रुटि देगा "संकेत से वंचित।" ऐसा नहीं होना चाहिए, लेकिन ऐसा ही जीवन है।

  3. कनेक्शन स्ट्रिंग 2: यदि आप सर्वर का नाम गलत तरीके से (उदाहरण के लिए, निर्दिष्ट कर रहे हैं, या अधूरे हैं mysqlserverके बजाय mysqlserver.webdomain.com), आप एक समय समाप्ति मिलेगा। क्या आप कमांड लाइन से कनेक्शन स्ट्रिंग में निर्दिष्ट सर्वर नाम का उपयोग करके सर्वर को पिंग कर सकते हैं ?

  4. कनेक्शन स्ट्रिंग 3: यदि सर्वर का नाम आपके DNS (या होस्ट्स फ़ाइल) में है, लेकिन एक गलत या दुर्गम आईपी की ओर इशारा करता है, तो आपको मशीन-नहीं-पाया-ईश त्रुटि के बजाय एक टाइमआउट मिलेगा।

  5. जिस क्वेरी को आप कॉल कर रहे हैं, वह समय समाप्त कर रही है। ऐसा लग सकता है कि सर्वर से कनेक्शन समस्या है, लेकिन, इस बात पर निर्भर करता है कि आपका ऐप कैसे संरचित है, आप इसे उस चरण में ले जा सकते हैं, जहां आपकी क्वेरी टाइमआउट होने से पहले निष्पादित हो रही है।

  6. कनेक्शन लीक। कितनी प्रक्रियाएं चल रही हैं? कितने खुले कनेक्शन? मुझे यकीन नहीं है कि अगर कच्चे ADO.NET कनेक्शन पूलिंग करता है, तो आवश्यक रूप से अलाउ एंटरप्राइज लाइब्रेरी, या जहां सब कॉन्फ़िगर किया गया है, स्वचालित रूप से कनेक्शन बंद कर देता है। यह शायद एक लाल हेरिंग है। डब्ल्यूसीएफ और वेब सेवाओं के साथ काम करते समय, हालांकि, मेरे पास समय-समय पर कनेक्शन नहीं होने और अन्य अप्रत्याशित व्यवहार के कारण समस्याएँ हैं।

कोशिश करने के लिए चीजें:

  1. SQL प्रबंधन स्टूडियो के साथ सर्वर से कनेक्ट होने पर क्या आपको टाइमआउट मिलता है? यदि ऐसा है, तो नेटवर्क कॉन्फिगरेशन समस्या की संभावना है। यदि आपको प्रबंधन स्टूडियो से जुड़ते समय कोई समस्या नहीं दिखती है, तो समस्या आपके ऐप में होगी, सर्वर के साथ नहीं।

  2. SQL Profiler चलाएँ, और देखें कि वास्तव में तार के पार क्या हो रहा है। आपको यह बताने में सक्षम होना चाहिए कि क्या आप वास्तव में कनेक्ट कर रहे हैं, या यदि कोई क्वेरी समस्या है।

  3. प्रबंधन स्टूडियो में अपनी क्वेरी चलाएँ, और देखें कि इसमें कितना समय लगता है।

सौभाग्य!


यदि आपकी क्वेरी का समय समाप्त हो रहा है तो मुझे लगता है कि आपको एक कमांडटाइमआउट मिलेगा
user55474

@ user55474 शायद; निर्भर करता है ( बहुत कम ही) यह कैसे बुलाया जा रहा है।
डी एनवी

इस msdn ब्लॉग पोस्ट के अनुसार नहीं: blogs.msdn.com/b/spike/archive/2008/07/31/…
tom redfern

@ मुझे विश्वास है कि मैंने कहा था कि यह दुर्लभ था, लेकिन मैंने इसे पहली बार देखा है।
3Dave

1
+1 "रन एसक्यूएल प्रोफाइलर के लिए"। ऐसा लगता है कि यह जटिल होगा लेकिन आप वास्तव में "टूल> SQL सर्वर प्रोफाइलर" पर क्लिक करें और देखें कि आपका ऐप SQL सर्वर से क्या कह रहा है। यह पता चला है मेरा विकल्प # 5 :)
एंड्रयू Kvochick 20

11

यदि आप इसे गतिशील रूप से बदलना चाहते हैं, तो मैं SqlConnectionStringBuilder का उपयोग करना पसंद करता हूं ।

यह आपको ConnectionString अर्थात स्ट्रिंग को क्लास ऑब्जेक्ट में परिवर्तित करने की अनुमति देता है, सभी कनेक्शन स्ट्रिंग गुण इसके सदस्य बन जाएंगे।

इस मामले में असली फायदा यह होगा कि आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि क्या कनेक्शन स्ट्रिंग में पहले से ही कनेक्शनटाइमआउट स्ट्रिंग भाग मौजूद है या नहीं?

साथ ही यह एक ऑब्जेक्ट बनाता है और स्ट्रिंग को मैनिपुलेट करने के बजाय ऑब्जेक्ट में वैल्यू असाइन करने के लिए हमेशा अच्छा होता है।

यहाँ कोड नमूना है:

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);

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