मध्यांतर बीत गया। ऑपरेशन पूरा होने से पहले का समय समाप्त हो गया है या सर्वर जवाब नहीं दे रहा है। बयान समाप्त कर दिया गया है


295

मेरी वेब साइट (प्रति दिन 20000-60000) पर मेरे कई उपयोगकर्ता हैं, जो मोबाइल फ़ाइलों के लिए एक डाउनलोड साइट है। मेरे पास अपने सर्वर (विंडोज़ सर्वर 2008-आर 2) का रिमोट एक्सेस है।
मुझे पहले "सर्वर अनुपलब्ध है" त्रुटियां मिली हैं, लेकिन अब मैं कनेक्शन टाइमआउट त्रुटि देख रहा हूं।
मैं इससे परिचित नहीं हूं - ऐसा क्यों होता है और मैं इसे कैसे ठीक कर सकता हूं?

नीचे पूर्ण त्रुटि है:

/ 'अनुप्रयोग में सर्वर त्रुटि मध्यांतर बीत गया। ऑपरेशन पूरा होने से पहले का समय समाप्त हो गया है या सर्वर जवाब नहीं दे रहा है। बयान समाप्त कर दिया गया है। विवरण: वर्तमान वेब अनुरोध के निष्पादन के दौरान एक अनियंत्रित अपवाद हुआ। कृपया त्रुटि के बारे में अधिक जानकारी के लिए स्टैक ट्रेस की समीक्षा करें और यह कोड में कहां उत्पन्न हुआ।

अपवाद विवरण: System.Data.SqlClient.SqlException: समय समाप्त हो गया। ऑपरेशन पूरा होने से पहले का समय समाप्त हो गया है या सर्वर जवाब नहीं दे रहा है। बयान समाप्त कर दिया गया है।

स्रोत त्रुटि:

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

स्टैक ट्रेस:

[SqlException (0x80131904): समय समाप्त हो गया। ऑपरेशन पूरा होने से पहले का समय समाप्त हो गया है या सर्वर जवाब नहीं दे रहा है। बयान को समाप्त कर दिया गया है।]
System.Data.SqlClient.SqlConnection.OnError (SqlException अपवाद, बूलियन ब्रेककेंक्शन) +404
System.Data.SqlClient.TdsPserser.ThrowExceptionAndWarning () +412
System.Data.SqlClient.TdsPserser.tdsPserser। , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet बल्क चॉपीहैंडलर, TdsParserStateObject
StateObj।
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, बूलियन returnStream, बूलियन async) 6,389,442
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, बूलियन returnStream, स्ट्रिंग विधि, DbAsyncResult परिणाम) + 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (DbAsyncResult परिणाम, स्ट्रिंग मेथडनाम, बूलियन SendToPipe) +689
System.Data.SllClient.SqlCommand.ExecuteNonQuery () +327
NovinMedia.DadD.DD.DD.D.D. , Int32 और पंक्तियाँ) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (ऑब्जेक्ट सत्र_और, ऑनलाइन बूलियन) +440
NiceFileExplorer.Global.Application_Start (ऑब्जेक्ट प्रेषक, EventArgs e) +163

[HttpException (0x80004005): समय समाप्त हो गया। ऑपरेशन पूरा होने से पहले का समय समाप्त हो गया है या सर्वर जवाब नहीं दे रहा है। बयान समाप्त कर दिया गया।]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext संदर्भ, HttpApplication एप्लिकेशन) 4,052,053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, HttpContext संदर्भ, MethodInfo [] हैंडलर) 191
System.Web.HttpApplication। InitSpecial (HttpApplicationState राज्य, MethodInfo [] संचालकों, IntPtr appContext, HttpContext संदर्भ) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, HttpContext संदर्भ) 407
System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) +375

[HttpException (0x80004005): समय समाप्त हो गया। ऑपरेशन पूरा होने से पहले का समय समाप्त हो गया है या सर्वर जवाब नहीं दे रहा है। बयान समाप्त कर दिया गया।]
System.Web.HttpRuntime.FirstRequestInit (HttpContext संदर्भ) 11,686,928 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext संदर्भ) 141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest wr, HttpContext संदर्भ) 4,863,749


जवाब के बाद संपादित:
मेरी Application_Startमें Global.asaxनीचे की तरह है:

protected void Application_Start(object sender, EventArgs e)
{
    Application["OnlineUsers"] = 0;

    OnlineUsers.Update_SessionEnd_And_Online(
        DateTime.Now,
        false);

    AddTask("DoStuff", 10);
}

संग्रहीत प्रक्रिया कहा जा रहा है:

ALTER Procedure [dbo].[sp_OnlineUsers_Update_SessionEnd_And_Online]
    @Session_End datetime,
    @Online bit
As
Begin
    Update OnlineUsers
    SET
        [Session_End] = @Session_End,
        [Online] = @Online

End

मेरे पास ऑनलाइन उपयोगकर्ता प्राप्त करने की दो विधियाँ हैं:

  1. का उपयोग करते हुए Application["OnlineUsers"] = 0;
  2. डेटाबेस का उपयोग कर एक अन्य

इसलिए, विधि # 2 के लिए मैं सभी OnlineUsers को रीसेट कर देता हूं Application_Start। उस तालिका में 482,751 से अधिक रिकॉर्ड हैं।


1
जैसा कि यहां बताया गया है कि डिफ़ॉल्ट 15 सेकंड है
V4Vendetta

1
मूल कारण विश्लेषण करने के लिए बेहतर है, ऐसी समस्या पैदा करने के लिए विभिन्न कारण हैं। सबसे बुनियादी क्वेरी की जटिल संरचना है। जब मैं तालिका में हेक्स मानों के रूप में संग्रहीत छवियों को प्राप्त करता हूं तो मुझे उसी मुद्दे का सामना करना पड़ा।
विजय कुंभोज

उपरोक्त कारणों के अलावा, मैं एक और जोड़ूंगा : लॉक टाइमआउट: docs.microsoft.com/en-us/sql/t-sql/statements/… यदि यह धागा लॉक का बहुत लंबा इंतजार कर रहा है, तो यह टाइमआउट आधारित होगा दस्तावेज़ के ऊपर।
हरबर्ट यू

जवाबों:


344

ऐसा लगता है कि आपके पास एक क्वेरी है जो इसे चाहिए इससे अधिक समय लग रहा है। आपके स्टैक ट्रेस और आपके कोड से आपको यह निर्धारित करने में सक्षम होना चाहिए कि वास्तव में क्या क्वेरी है।

इस प्रकार के टाइमआउट के तीन कारण हो सकते हैं;

  1. कहीं कोई गतिरोध है
  2. डेटाबेस के आँकड़े और / या क्वेरी प्लान कैश गलत हैं
  3. क्वेरी बहुत जटिल है और इसे ट्यून करने की आवश्यकता है

एक गतिरोध को ठीक करना मुश्किल हो सकता है, लेकिन यह निर्धारित करना आसान है कि क्या मामला है। Sql Server Management Studio के साथ अपने डेटाबेस से कनेक्ट करें। बाएँ फलक में सर्वर नोड पर राइट-क्लिक करें और गतिविधि मॉनिटर चुनें । चल रही प्रक्रियाओं पर एक नज़र डालें। आम तौर पर सबसे निष्क्रिय या चल रहा होगा। जब समस्या होती है तो आप प्रक्रिया अवस्था द्वारा किसी भी अवरुद्ध प्रक्रिया की पहचान कर सकते हैं। यदि आप प्रक्रिया पर राइट-क्लिक करते हैं और विवरण का चयन करते हैं तो यह आपको प्रक्रिया द्वारा निष्पादित अंतिम क्वेरी दिखाएगा।

दूसरा मुद्दा डेटाबेस को उप-इष्टतम क्वेरी योजना का उपयोग करने का कारण होगा। यह आँकड़ों को साफ करके हल किया जा सकता है:

exec sp_updatestats

अगर वह काम नहीं करता है तो आप भी कोशिश कर सकते हैं

dbcc freeproccache

आपको ऐसा नहीं करना चाहिए जब आपका सर्वर भारी लोड के अधीन है क्योंकि यह अस्थायी रूप से एक बड़े प्रदर्शन को प्रभावित करेगा क्योंकि सभी संग्रहीत प्रोक्स और क्वेरीज़ को पहले निष्पादित होने पर फिर से जोड़ दिया जाता है। हालाँकि, जब से आप यह कहते हैं कि समस्या कभी-कभी आती है , और स्टैक ट्रेस इंगित करता है कि आपका आवेदन शुरू हो रहा है, मुझे लगता है कि आप एक क्वेरी चला रहे हैं जो केवल कभी-कभी ही चलती है। SQL सर्वर को पिछली क्वेरी योजना का पुन: उपयोग नहीं करने के लिए मजबूर करने से आप बेहतर हो सकते हैं। यह कैसे करें के विवरण के लिए यह उत्तर देखें ।

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


39
मुझे वही त्रुटि हो रही थी लेकिन एक प्रश्न में कि 'बस' ने 8 सेकेंड का समय लिया ... और आपकी exec sp_updatestatsसमस्या के समाधान के बारे में आपकी टिप । बहुत धन्यवाद!
nrod

2
इस तरह की समस्या का समाधान लगभग ट्यूनिंग टाइमआउट या कनेक्शन पूल के आकार का मामला नहीं है। आपको मूल कारण का पता लगाने और उसमें गोता लगाने की आवश्यकता होगी। यदि आपको उस मूल कारण को सुलझाने में सहायता की आवश्यकता है तो आप अपना प्रश्न पोस्ट कर सकते हैं।
मार्निक्स वैन वैलेन

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

1
क्या हमें यकीन है कि यह एक कमांड टाइमआउट है और कनेक्शन टाइमआउट नहीं है? "System.Data.SqlClient.SqlConnection.OnError" मेरे लिए एक कनेक्शन समस्या को इंगित करता है।
माइक डब्ल्यू

1
@PrashantPimpale यह निर्भर करता है कि क्या आपके पास उत्पादन में एक गंभीर मुद्दा है जहां गलत निष्पादन योजनाओं के परिणामस्वरूप गलत आंकड़े हैं, हां, यह एक समाधान हो सकता है। असाधारण समस्याओं (जैसे हार्डवेयर की विफलता) को छोड़कर, अद्यतन आंकड़े आपके डेटाबेस को नहीं तोड़ेंगे। यह थोड़ा धीमा प्रश्नों का कारण हो सकता है। अंत में, हालांकि यह आपकी कॉल है।
Marnix van Valen

155

आपके कोड में जहां आप संग्रहीत प्रक्रिया चलाते हैं, आपके पास कुछ इस तरह होना चाहिए:

SqlCommand c = new SqlCommand(...)
//...

कोड की एक ऐसी लाइन जोड़ें:

c.CommandTimeout = 0;

यह ऑपरेशन पूरा होने के लिए जितना समय चाहिए उतना इंतजार करेगा।


143
आपको यह भी पता होना चाहिए कि 0 मान अनुशंसित नहीं है : 0 का मान किसी सीमा का संकेत नहीं देता है, और कमांडटाइमआउट से बचना चाहिए क्योंकि कमांड निष्पादित करने का प्रयास अनिश्चित काल तक इंतजार करेगा। यह सीखने के लिए बेहतर है कि कमांड को कितना समय लगता है, और यदि आवश्यक हो तो टाइमआउट मान बढ़ाएं।
ओटील

7
मैं ओटियल से सहमत हूं और आपके उत्तर को अस्वीकार कर दिया: कमांडटाइमआउट को 0 पर सेट करते समय आप वेबसर्वर को डेटाबेस सर्वर से पुनर्प्राप्त करने का मौका नहीं देते हैं जो रेस्पाइग नहीं है। दूसरी बात यह है कि जब आप डिफॉल्ट टाइमआउट मारते हैं तो आपको इसका कारण देखना चाहिए। ज्यादातर मामलों में क्वेरी को टाइमआउट बढ़ाने से बेहतर है।
Maarten Kieft

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

2
हां बड़े डेटा ट्रांसफर के लिए यह सेट करने का कोई मतलब नहीं है। यदि आप लाखों पंक्तियों को स्थानांतरित कर रहे हैं तो ओटियल और ब्लैकहॉकडिजाइन जो कह रहे हैं उसका कोई मतलब नहीं है।
ब्लुएर्यूबज़

डेटा-केंद्रित विकास के 20 वर्षों में, मुझे ऐसा करने की आवश्यकता नहीं है। लगभग हमेशा एक उचित सरल समाधान होता है जो बेहतर प्रदर्शन देता है और पूरे दिन डेटाबेस में पीसने के लिए एकल प्रक्रिया का अवसर नहीं देता है। DB प्रदर्शन समस्याओं के विशाल बहुमत को ट्यून किया जा सकता है जहां वे परिमाण के कई क्रम को तेजी से निष्पादित करते हैं। यानी, वह प्रक्रिया जिसे आप पूरा करने के लिए 3 घंटे इंतजार कर रहे हैं, शायद 3 मिनट या यहां तक ​​कि 3 सेकंड तक ट्यून किया जा सकता है।
19

25

आप CommandTimeoutलंबे समय तक चलने वाले SQL लेनदेन के लिए अनुमति देने के लिए SQL कमांड की संपत्ति सेट कर सकते हैं।

आपको SQL क्वेरी को भी देखना पड़ सकता है जो टाइमआउट का कारण बन रही है।


नमस्ते, "या आपको एसक्यूएल क्वेरी को देखना होगा जो टाइमआउट का कारण बन रहा है" -> एसक्यूएल सर्वर 2008 में मुझे उस टाइमआउट के लिए कहां जांच करनी चाहिए?
सिल्वरलाइट डेस

आपको स्टैक प्रक्रिया की जांच करने की आवश्यकता हो सकती है जिसे DataLayer.OnlineUsers.Update_SessionEnd_And_Online से कहा जाता है क्योंकि स्टैक ट्रेस इसकी ओर इशारा करता है। लाइव डेटाबेस की एक प्रति परीक्षण में लें और आवश्यक मापदंडों में पास होने वाली संग्रहीत प्रक्रिया को चलाएं, अगर इसे पूरा करने में 30 सेकंड से अधिक समय लगता है, यही कारण है कि आपको एक समय समाप्त हो रहा है। मैं मान रहा हूं कि आपके पास SQL ​​सर्वर प्रबंधन स्टूडियो तक पहुंच है।
केव रिची

हाँ, मेरे पास sql सर्वर 2008 तक पहुँच है। मुझे अपने तरीके से कोशिश करनी चाहिए।
सिल्वरलाईट

यदि आपको समस्या के कारण संग्रहीत कार्यविधि मिलती है, तो आप संग्रहीत कार्यविधि में निहित क्वेरी को डेटाबेस ट्यूनिंग सलाहकार के माध्यम से चला सकते हैं, जो सुझाव देगा कि यदि आपको किसी भी अनुक्रमणिका आदि की आवश्यकता है तो यहाँ लिंक करें msdn.microsoft.com/en-us/library /ms174202.aspx
केव रिची

12

जबकि पहले की सभी प्रतिक्रियाएँ उस मुद्दे को संबोधित करती थीं जो उन्होंने सभी मामलों को कवर नहीं किया था।

Microsoft ने इस समस्या को स्वीकार किया है और इसे 2011 में समर्थित ऑपरेटिंग सिस्टम के लिए ठीक किया है, इसलिए यदि आपको स्टैक ट्रेस मिलता है जैसे:

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)

आपको अपने .NET असेंबली को अपडेट करने की आवश्यकता हो सकती है।

मिरर किए गए डेटाबेस के लिए कनेक्शन-रिट्री एल्गोरिथ्म में त्रुटि के कारण यह समस्या होती है।

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

विवरण के लिए KB 2605597 देखें

https://support.microsoft.com/kb/2605597


9

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


इस! बिल्कुल यही। मेरी समस्या यह थी कि मैं उनके लिए प्रतीक्षा किए बिना एक अलग थ्रेड पर तरीकों को बंद कर रहा था (क्योंकि उपयोगकर्ता को उस पद्धति, पृष्ठभूमि स्क्रिप्ट के परिणाम की आवश्यकता नहीं है)। निपटान के बिना ( usingब्लॉक का उपयोग करते हुए ) मुझे यह टाइमआउट मुद्दा मिल गया है। यह इसे हल करने के लिए लग रहा था।
CularBytes

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

8

आपको CommandTimeout विशेषता सेट करना होगा। आप DbContext चाइल्ड क्लास में CommandTimeout विशेषता सेट कर सकते हैं।

public partial class StudentDatabaseEntities : DbContext
{
    public StudentDatabaseEntities()
        : base("name=StudentDatabaseEntities")
    {
        this.Database.CommandTimeout = 180;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<StudentDbTable> StudentDbTables { get; set; }
}

7

मुझे उसी समस्या का सामना करना पड़ा जिस पर मैंने लगभग 3 दिन काम किया। मैंने देखा कि हमारे रिकॉर्ड्स की संख्या बहुत अधिक नहीं है, हमारे वरिष्ठ डेवलपर डेटाबेस में 2 चित्र और फ़िंगरप्रिंट रखते हैं। जब मैं इस हेक्स मूल्यों को प्राप्त करने की कोशिश करता हूं तो इसे लंबे समय तक ले जाता है, मैं अपनी प्रक्रिया को लगभग 38 सेकंड तक निष्पादित करने के लिए औसत समय की गणना करता हूं। डिफ़ॉल्ट कमांडटाइम 30 सेकंड का है, इसलिए मेरी संग्रहीत प्रक्रिया को चलाने के लिए आवश्यक औसत से कम समय है। मैंने अपना कमांडटाइम नीचे की तरह सेट किया

cmd.CommandTimeout = 50

और इसका काम ठीक है लेकिन कभी-कभी यदि आपकी क्वेरी को 50 सेकंड से अधिक समय लगता है तो यह उसी त्रुटि को संकेत देगा।


4

मुझे हाल ही में इस त्रुटि का सामना करना पड़ा और कुछ संक्षिप्त जांच के बाद, इसका कारण यह पाया गया कि हम डेटाबेस को पकड़े हुए डिस्क पर अंतरिक्ष से बाहर चल रहे थे (1 जीबी से कम)।

जैसे ही मैंने डेटाबेस फ़ाइलों (.mdf और .ldf) को एक ही सर्वर पर एक और डिस्क (बहुत अधिक जगह के साथ) में स्थानांतरित किया, उसी पृष्ठ (क्वेरी को चलाने वाला) जिसमें तीन सेकंड के भीतर समय-आउट लोड किया गया था।

इस त्रुटि को हल करने की कोशिश करते समय एक और बात, डेटाबेस लॉग फ़ाइलों का आकार है। आपकी लॉग फाइलें सिर्फ सिकुड़ने की आवश्यकता हो सकती हैं।


3

मेरे पास sp_foo में बड़ी गणना के साथ समस्या है जो बड़े समय लेता है इसलिए मैंने
इस छोटे से कोड के साथ तय किया है

public partial class FooEntities : DbContext
{
   public FooEntities()
         : base("name=FooEntities")
    {
        this.Configuration.LazyLoadingEnabled = false;

        // Get the ObjectContext related to this DbContext
        var objectContext = (this as IObjectContextAdapter).ObjectContext;

        // Sets the command timeout for all the commands
        objectContext.CommandTimeout = 380;
    }

3

डिफ़ॉल्ट टाइमआउट 15 सेकंड है, इसे बदलने के लिए, 0 असीमित है, कोई भी अन्य संख्या सेकंड की संख्या है।

कोड में

using (SqlCommand sqlCmd = new SqlCommand(sqlQueryString, sqlConnection))
   {
      sqlCmd.CommandTimeout = 0; // 0 = give it as much time as it needs to complete
      ...
    }

योर वेब में। कॉनफिग, "कमांड टाइमआउट = 0;" 1 घंटे (3600 सेकंड) से नीचे या बाहर समय न दें

  <add name="ConnectionString" connectionString="Data Source=ServerName;User ID=UserName;Password=Password;Command Timeout=3600;" providerName="System.Data.SqlClient" />

2
वे दो अलग-अलग टाइमआउट हैं। आपका पहला सुझाव प्रश्न को संबोधित करता है। यदि कनेक्शन प्रदाता ने इसका समर्थन किया, जो SqlClient नहीं करता है तो आपका दूसरा काम करेगा। किसी भी दर पर, उत्पादन में एक अच्छा विचार कभी नहीं होता है। 30 सेकंड सामान्य डिफ़ॉल्ट है।
सनकैट २२

2

@SilverLight .. यह स्पष्ट रूप से एक डेटाबेस ऑब्जेक्ट के साथ एक मुद्दा है। यह एक बुरी तरह से लिखित क्वेरी, या लापता अनुक्रमणिका हो सकती है। लेकिन अब तक मैं आपको अपने डेटाबेस ऑब्जेक्ट्स के साथ समस्या की जांच किए बिना टाइमआउट बढ़ाने का सुझाव नहीं दूंगा

NovinMedia.Data.DbObject.RunProcedure(String storedProcName, IDataParameter[] parameters, Int32& rowsAffected) +209

प्रक्रिया के नाम का पता लगाने के लिए कोड की इस लाइन पर एक ब्रेकपॉइंट लगाएं और फिर इसकी निष्पादन योजना को देखते हुए प्रक्रिया का अनुकूलन करें।

जब तक आप संग्रहीत प्रक्रिया के बारे में विवरण पोस्ट नहीं करते तब तक मैं आपकी अधिक मदद नहीं कर सकता।


संग्रहीत प्रक्रिया कोई फैंसी सामान नहीं करती है। हालाँकि ऐसा लगता है कि प्रक्रिया निष्पादित होने के दौरान OnlineUsers तालिका लॉक की जा रही है। SQL प्रोफाइलर को यह देखने की कोशिश करें कि Application_Start पर क्या हो रहा है
अमित राय शर्मा

2

प्रयत्न

EXEC SP_CONFIGURE 'remote query timeout', 1800
reconfigure
EXEC sp_configure

EXEC SP_CONFIGURE 'show advanced options', 1
reconfigure
EXEC sp_configure

EXEC SP_CONFIGURE 'remote query timeout', 1800
reconfigure
EXEC sp_configure

फिर अपने सूचकांक का पुनर्निर्माण करें


8
क्या आप अपना समाधान बता सकते हैं?
एचपी

0

समयबाह्य समयसीमा समाप्त हो गई क्योंकि sqlCommand.CommandTimeout प्रॉपर्टी में आपके द्वारा सेट किए गए समय से अधिक समय लग रहा है।

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


0

TLDR :

  1. अनुप्रयोग और DB सर्वर दोनों को रिबूट करना सबसे तेज़ फ़िक्स है जहाँ डेटा वॉल्यूम, नेटवर्क सेटिंग्स और कोड नहीं बदला गया है। हम हमेशा एक नियम के रूप में ऐसा करते हैं
  2. हार्ड-ड्राइव को विफल करने का संकेतक हो सकता है जिसे प्रतिस्थापन की आवश्यकता है - सिस्टम सूचनाएं जांचें

मैंने कई बार विभिन्न कारणों से इस त्रुटि का सामना किया है और विभिन्न समाधान किए हैं, जिनमें शामिल हैं:

  1. SqlBulkCopy का उपयोग करने के लिए मेरे कोड को फिर से सक्रिय करना
  2. समयबाह्य मान बढ़ाना, जैसा कि विभिन्न उत्तरों में बताया गया है या अंतर्निहित कारणों की जाँच ( डेटा से संबंधित नहीं हो सकती है )
  3. कनेक्शन टाइमआउट (डिफ़ॉल्ट 15s) - समाप्ति से पहले SQL सर्वर के साथ कनेक्शन स्थापित करने के लिए प्रतीक्षा करने में कितना समय लगता है - टीसीपी / पोर्ट संबंधित - एक समस्या निवारण चेकलिस्ट (बहुत आसान MSDN लेख) के माध्यम से जा सकता है
  4. कमांड टाइमआउट (डिफ़ॉल्ट 30s) - किसी क्वेरी के निष्पादन के लिए प्रतीक्षा करने में कितना समय लगता है - क्वेरी निष्पादन / नेटवर्क ट्रैफ़िक संबंधित - इसमें एक समस्या निवारण प्रक्रिया भी है (एक और बहुत ही आसान MSDN लेख)
  5. सर्वर (ओं) की रिबूटिंग - दोनों एप्लीकेशन और डीबी सर्वर (यदि अलग हो) - जहां कोड और डेटा नहीं बदला गया है, तो पर्यावरण को बदल दिया जाना चाहिए - पहली बात आपको करना चाहिए। आमतौर पर पैच के कारण (ऑपरेटिंग सिस्टम,। नेट फ्रेमवर्क या SQL सर्वर पैच या अपडेट)। विशेष रूप से यदि टाइमआउट अपवाद नीचे दिखाई देता है (भले ही हम Azure का उपयोग न करें):
    • System.Data.Entity.Core.EntityException: एक अपवाद उठाया गया है जो संभावित रूप से एक क्षणिक विफलता के कारण है। यदि आप SQL Azure डेटाबेस से कनेक्ट कर रहे हैं तो SqlAzureExecutionStrategy का उपयोग करने पर विचार करें। ---> System.Data.Entity.Core.EntityCommandExecutionException: कमांड परिभाषा निष्पादित करते समय एक त्रुटि हुई। विवरण के लिए आंतरिक अपवाद देखें। ---> System.Data.SqlClient.SqlException: सर्वर से परिणाम प्राप्त करते समय ट्रांसपोर्ट-स्तरीय त्रुटि हुई है। (प्रदाता: टीसीपी प्रदाता, त्रुटि: 0 - अर्ध-समयावधि अवधि समाप्त हो गई है।) ---> System.ComponentModel.Win32Exception: अर्ध-समयावधि अवधि समाप्त हो गई है

0

यह भी सुनिश्चित करें कि आपके पास केवल एक लंबित लेनदेन नहीं है। :)

मैं आसपास कुछ परीक्षण कर रहा था और सुरक्षित होने के लिए एक लेनदेन शुरू किया लेकिन इसे कभी भी बंद नहीं किया। काश त्रुटि अधिक स्पष्ट होती लेकिन ओह अच्छा!


0

हम पर मुश्किल समय था Timeout expired/max pool reached Sqlexception। एक कार्यक्षेत्र के रूप में और सर्वर या सेवा को हम MAX SERVER MEMORYSQL सर्वर में चर को संशोधित करने से रोकने के लिए (या तो SQL प्रबंधन स्टूडियो या टी-एसक्यूएल के माध्यम से):

DECLARE @maxMem INT = 3000 --Max. memory for SQL Server instance in MB
EXEC sp_configure 'show advanced options', 1
RECONFIGURE

यह अस्थायी रूप से समस्या को तब तक ठीक करता है जब तक कि यह फिर से न हो जाए। हमारे मामले में हमें संदेह है कि इसे ऐप स्तर पर कनेक्शन लीक के साथ करना है।


0

हमने हाल ही में SqlClient( Microsoft.Data.SqlClient) के NuGet संस्करण में अपग्रेड किया है जिसमें एक बग है । इस बग को 1.x चक्र के जीवनकाल के दौरान पेश किया गया था और पहले से ही तय किया गया है। फिक्स 2.0.0 रिलीज में उपलब्ध होगा जो इस लेखन के समय उपलब्ध नहीं है। एक पूर्वावलोकन उपलब्ध है।

आप यहां विवरणों का निरीक्षण कर सकते हैं: https://github.com/dotnet/SqlClient/issues/262

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