2010-10-27 4 views
6

में एक संग्रहीत प्रक्रिया फोन सी # से, मैं के बाद प्रक्रिया शुरू होता है ExecuteStoreCommandसमय समाप्त जब मैं एफई के साथ एसक्यूएल सर्वर 2008

30 सेकंड के साथ एक लंबी संग्रहीत प्रक्रिया कहते हैं, मैं एक समय समाप्ति अपवाद है।

मैं टाइमआउट कैसे कॉन्फ़िगर कर सकता हूं? सर्वर पर या मेरे सी # क्लाइंट में?

धन्यवाद

उत्तर

16

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

भले ही आप अपने कमांडटाइमआउट को ऊपर उठाकर समस्या को हल करें, आप संभावित रूप से अपने डेटाबेस में अन्य अवरोधन समस्याओं का कारण बन सकते हैं। अवरुद्ध प्रश्नों या खराब क्वेरी योजनाओं, या बदले में बुरी तरह से डिज़ाइन की गई सारणी और अनुक्रमणिका के लिए देखें।

1

संग्रहीत प्रक्रिया में एसक्यूएल को ठीक करने के अलावा, आप जो कुछ भी करते हैं, वह वास्तविक समस्या (एसक्यूएल) को मास्किंग कर रहा है।

आपको अपनी प्रक्रिया को तेज करने के बारे में एक प्रश्न पूछने की आवश्यकता है, जहां आप अपनी टेबल पोस्ट करते हैं, और संग्रहीत प्रक्रिया कोड ताकि इसे एक बार और सभी के लिए तय किया जा सके।

+1

मुझे पता है लेकिन 1 मिलियन सम्मिलन के लिए, मेरे पास कोई विकल्प नहीं है ... –

+4

यह मूल पोस्ट में डालने के लिए बहुत महत्वपूर्ण जानकारी होगी, क्या आपको नहीं लगता? –

+1

एक संग्रहीत प्रक्रिया कॉल से 1 मिलियन सम्मिलन ?? उसके साथ क्या चल रहा है ??? –

3
using (var conn = new SqlConnection(ConnectionStrings.toMyDB)) 
{ 
    conn.Open(); 
    using (var cmd = new SqlCommand("myProc", conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandTimeout = 30; // Increase this to allow the proc longer to run 
     cmd.Parameters.AddWithValue("@Param", myParam); 
     cmd.ExecuteNonQuery(); 
    } 
} 
+0

Patrice Pezillier EF में टाइमआउट के बारे में पूछ रहा है, और आपका उदाहरण ADO.NET –

+0

मैं डेटासेट को परिणाम कैसे पास कर सकता हूं? मैं अब इस तकनीक के साथ हूँ। –

4
 using (var context = new MyDbEntities()) 
     { 
      context.CommandTimeout = 600; 
      context.MyLongRunningStoredProc(); 
     } 
0

का उपयोग अनुक्रमित मेरी समस्या हल, मुझे पता चला है कि ExecuteStoreCommand के साथ संग्रहीत प्रक्रिया को क्रियान्वित करने एसक्यूएल में के रूप में एक ही समय नहीं है।

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