2013-05-03 9 views
34

मैं एक एएसपी.नेट वेब पेज पेज चला रहा हूं कि प्रारंभिक लोड पर SQL सर्वर से आइटम्स की एक सूची खींचती है। यह क्वेरी एक या दूसरे में चलती है और पृष्ठ को 2 सेकंड के भीतर लोड करती है। वापसी लगभग 1000 रिकॉर्ड है, दे या ले लो। मैं कुछ अन्य जानकारी के साथ एक सेवा प्रबंधक एसक्यूएल डेटाबेस से होस्टनाम खींच रहा हूँ।Win32Exception (0x80004005): प्रतीक्षा ऑपरेशन का समय

इस पृष्ठ के भीतर, मेरे पास एक खोज है जो अनिवार्य रूप से एक ही क्वेरी को चलाती है लेकिन मेजबाननाम के आधार पर इसे एक LIKE के साथ चलाती है। यह वही पृष्ठ लोड करता है जिसमें सभी होस्टनाम हैं जिनमें खोज क्वेरी का हिस्सा होता है। क्वेरी आम तौर पर एक दूसरे के तहत SQL प्रबंधन स्टूडियो के भीतर चलती है, लेकिन पृष्ठ लोड करना काफी लंबा होता है और कभी-कभी यह समय समाप्त हो जाता है।

मेरा सवाल यह है कि पैरामीटर आधारित खोज इतनी लंबी और कभी-कभी किसी स्पष्ट कारण के लिए टाइमआउट क्यों नहीं लेती है। क्या इस समय समाप्ति को कम करने के लिए कोई कदम उठाया जा सकता है? नीचे पूरी त्रुटि है।

एप्लिकेशन में सर्वर त्रुटि।


The wait operation timed out 

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

अपवाद विवरण:

System.ComponentModel.Win32Exception: The wait operation timed out 
Source Error: 

Line 13:  } 
Line 14:  
Line 15:  var selectedData = db.Query(selectCommand, searchTerm); 
Line 16: 
Line 17: 

Source File: c:\Users\u0149920\Documents\My Web Sites\AppSupport\servers\default.cshtml Line: 15 

स्टैक ट्रेस: ​​

[Win32Exception (0x80004005): The wait operation timed out] 
[SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.] 
    System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1753346 
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5295154 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242 
    System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1682 
    System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +59 
    System.Data.SqlClient.SqlDataReader.get_MetaData() +90 
    System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +365 
    System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) +1325 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +175 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53 
    System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +134 
    System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41 
    System.Data.Common.DbCommand.ExecuteReader() +12 
    WebMatrix.Data.<QueryInternal>d__0.MoveNext() +152 
    System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381 
    System.Linq.Enumerable.ToList(IEnumerable`1 source) +58 
    WebMatrix.Data.Database.Query(String commandText, Object[] parameters) +103 
    ASP._Page_servers_default_cshtml.Execute() in c:\Users\u0149920\Documents\My Web Sites\AppSupport\servers\default.cshtml:15 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197 
    System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) +69 
    System.Web.WebPages.WebPage.ExecutePageHierarchy() +151 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +76 
    System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +114 

संस्करण जानकारी: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929

उत्तर

20
जो भी मुझसे ज्यादा जानते हैं, बल्कि यह बेकार या अंकन से करने के लिए

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

सर्वरस्टैक ने पहले से ही इसी तरह के प्रश्न का उत्तर दिया है। इसने एसएमएल मशीन पर एसक्यूएल के साथ अपना मुद्दा हल किया। कृपया here

आपको इंडेक्स के साथ समस्याओं को ठीक करने के लिए निम्न आदेश चलाने की आवश्यकता है।

exec sp_updatestats 
+1

यह मेरे लिए काम करता है! :) – BugLover

+16

यह आम तौर पर लागू उत्तर नहीं है, यानी किसी भी दिए गए टाइमआउट से पूछताछ लंबे समय तक चल सकती है, भले ही इंडेक्स आंकड़े हाल ही में अपडेट किए गए हों या नहीं। –

+1

चलने से पहले exec sp_updatestats के परिणामों को पढ़ने और समझना सुनिश्चित करें। – redoc

29

आपके पास जो समस्या हो रही है वह क्वेरी कमांड बहुत अधिक समय ले रहा है। मेरा मानना ​​है कि निष्पादित करने के लिए क्वेरी के लिए डिफ़ॉल्ट टाइमआउट 15 सेकंड है। आपको कमांडटाइमआउट (सेकेंड में) सेट करने की आवश्यकता है ताकि कमांड को इसके निष्पादन को पूरा करने के लिए पर्याप्त समय हो। "कमांडटाइमआउट" आपके कनेक्शन स्ट्रिंग में "कनेक्शन टाइमआउट" से अलग है और प्रत्येक कमांड के लिए सेट होना चाहिए।

e.Command.CommandTimeout = 60 
उदाहरण के लिए

:

अपने एसक्यूएल चुनना घटना में, आदेश का उपयोग

Protected Sub SqlDataSource1_Selecting(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) 
    e.Command.CommandTimeout = 60 
End Sub 
+0

मैंने इस समस्या को एक वेब ऐप पर हल किया जहां क्वेरी वास्तव में बहुत अधिक समय ले रही थी - क्योंकि किसी ने भी उस क्षेत्र के लिए डीबी पर एक इंडेक्स नहीं बनाया था जिसकी पूछताछ की जा रही थी! यह कॉल का पहला बंदरगाह होना चाहिए :) –

3

मैं अन्य उत्तर यहाँ के साथ-साथ कुछ अन्य लोगों की कोशिश की। मैंने एसक्यूएल सेवाओं को भी रोक दिया और फिर से शुरू किया। कुछ भी काम नहीं किया।

हालांकि, मेरे कंप्यूटर को पुनरारंभ करने से काम किया गया।

+0

यूपे, मेरे लिए भी काम शुरू कर दिया। – incomplete

+0

यह एक समय के लिए काम करता है, लेकिन समस्या वापस आती है, और एक और पुनरारंभ की आवश्यकता है, क्या कोई वास्तविक स्थायी समाधान है? – BlackICE

+0

@ ब्लैकिस मैं इसे वापस नहीं आया है। – MiniRagnarok

5

मुझे एक ही समस्या थी। चल रहा है exec sp_updatestats कभी-कभी काम करता था, लेकिन हमेशा नहीं। मैंने प्रश्नों को तेज़ करने के लिए अपने प्रश्नों में NOLOCK कथन का उपयोग करने का निर्णय लिया। बस अपने FROM खंड, उदा के बाद NOLOCK जोड़ने .:

SELECT clicks.entryURL, clicks.entryTime, sessions.userID 
FROM sessions, clicks WITH (NOLOCK) 
WHERE sessions.sessionID = clicks.sessionID AND clicks.entryTime > DATEADD(day, -1, GETDATE()) 

पूरा लेख here पढ़ें।

+0

NOLOCK एक अच्छा समाधान है जब आपका सर्वर बहुत से बहु-उपयोगकर्ता काम कर रहा है या बहुत लंबी चल रही रिपोर्ट सामग्री है! –

+3

NOLOCK आमतौर पर ज्यादातर समस्याओं का एक बुरा समाधान है। (http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/): 1) "डर्टी पढ़ने" 2) गुम पंक्तियों 3) पढ़ना पंक्तियों दो बार 4) एक से अधिक संस्करण पढ़ना एक ही पंक्ति 5) सूचकांक भ्रष्टाचार 6) त्रुटि और अधिक पढ़ें। बस Google 'NOLOCK खराब विचार' ... (पीएस स्नैपशॉट अलगाव कुछ मामलों में आपका मित्र हो सकता है) – HansLindgren

+1

मैं असहमत हूं कि NOLOCK का उपयोग करना "आमतौर पर अधिकांश समस्याओं का एक बुरा समाधान है।" यह वास्तव में इस मुद्दे पर निर्भर करता है और आप समझते हैं कि नोलोक क्या कर रहा है। कुछ परिदृश्य हैं जहां डेटा की समग्र पूर्णता बहुत महत्वपूर्ण नहीं है। ऐसे परिदृश्य भी हैं जहां यह है - इस मामले में, आपको लॉक टेबल के साथ बिताए गए क्वेरी समय/समय को कम करना चाहिए। – Paul

4

अपने डेटाबेस में पुन: अनुक्रमण तालिका में देखें।

आप पहले विखंडन स्तर को ढूंढ सकते हैं - और यदि यह 10% से ऊपर है या तो आप फिर से अनुक्रमण से लाभ उठा सकते हैं। यदि यह बहुत अधिक है तो यह संभावना है कि यह एक महत्वपूर्ण प्रदर्शन बोतल गर्दन बना रहा है।

http://blog.sqlauthority.com/2009/01/30/sql-server-2008-2005-rebuild-every-index-of-all-tables-of-database-rebuild-index-with-fillfactor/

यह नियमित रूप से किया जाना चाहिए।

2

हम = 2008 से एक उन्नत 2014 एसक्यूएल सर्वर जहां हमारे स्थानीय विकास के लिए हमारे पिछले कनेक्शन तार के कुछ था एक डेटा स्रोत के बाद भी यह त्रुटि का सामना करना पड़ा।/इस

 <add name="MyLocalDatabase" connectionString="Data Source=./;Initial Catalog=SomeCatalog;Integrated Security=SSPI;Application Name=MyApplication;"/> 

तरह से ./ बदलने के लिए या तो (स्थानीय) या लोकलहोस्ट समस्या को हल करता है।

<add name="MyLocalDatabase" connectionString="Data Source=(local);Initial Catalog=SomeCatalog;Integrated Security=SSPI;Application Name=MyApplication;"/> 
+0

SQL Server 2012 से 2014 तक अपग्रेड करने के बाद मुझे भी यही समस्या थी। SQL सर्वर और वेब सर्वर अलग-अलग मशीनों पर थे लेकिन डेटा सर्वर को 'SERVER' से' SERVER.domain.local' _seems_ में बदलकर इसे ठीक करने के लिए बदल रहे थे। – Darren

0

मेरी तालिका में प्राथमिक कुंजी नहीं थी तो मुझे समय समाप्त हो गया था। सेट कुंजी sloved के बाद। ,

myDbContext.Database.CommandTimeout = 300; 

कहाँ myDbContext अपने DbContext उदाहरण है:

4

आप इकाई की रूपरेखा का उपयोग कर रहे हैं, तो आप डिफ़ॉल्ट टाइमआउट करके (पूरा करने के लिए एक लंबे समय से चल क्वेरी और अधिक समय देने के लिए) का विस्तार कर सकते और 300 सेकेंड में टाइमआउट मान है।

(एंटीटी फ्रेमवर्क 6 के रूप में सिंटेक्स वर्तमान)

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