2013-02-22 55 views
6

हमारे पास सी # क्लाइंट, सी # डब्ल्यूसीएफ वेब सेवा परत, और एक SQL सर्वर डेटाबेस के साथ 3-स्तरीय एप्लिकेशन है। वेब सेवा ADO.NET के साथ डेटाबेस से जुड़ती है। हमारे सभी सी # कोड .NET Framework 2.0 का उपयोग कर रहे हैं।निगरानी एडीओ.NET कनेक्शन ओपन टाइम

हाल ही में, एक ग्राहक ने हमारे आवेदन पर एक तनाव परीक्षण किया। परीक्षण के दौरान, वेब सर्वर ने निम्नलिखित त्रुटियों को उत्पन्न किया:

कनेक्शन स्ट्रिंग '...' के लिए डेटाबेस से कनेक्ट नहीं हो सका। मध्यांतर बीत गया। ऑपरेशन पूरा होने से पहले समय समाप्ति अवधि समाप्त हो गई है या सर्वर प्रतिक्रिया नहीं दे रहा है।

मुझे पता है कि कनेक्शन पूल भरने पर कनेक्शन त्रुटियों को पकड़ने के तरीके हैं और कनेक्शन पूल के बाहर कनेक्शन प्राप्त करने का प्रयास करें। हमें कई प्रश्न भी मिलते हैं जिन्हें ट्यून करने की आवश्यकता होती है, लेकिन वे वेब सर्वर कनेक्शन टाइमआउट की व्याख्या नहीं करते हैं।

हम यह पता लगाने की कोशिश कर रहे हैं कि क्यों वेब सर्वर डेटाबेस से कनेक्ट हो रहा था। मैंने सभी ADO.NET performance counters को सक्षम करने के लिए वेब सर्वर सेट अप किया है। हालांकि, मुझे टाइमआउट या कनेक्शन कनेक्ट करने या कनेक्शन करने के लिए आवश्यक समय से संबंधित कुछ भी नहीं दिखता है। आदर्श रूप से, हम अन्य ADO.NET काउंटर के बगल में perfmon में कनेक्शन समय को ग्राफ़ करने में सक्षम होंगे।

क्या कनेक्शन प्राप्त करने में ADO.NET प्रदर्शन की निगरानी करने का कोई तरीका है?

मैं कल्पना हम कनेक्शन को खोलने के लिए प्रयास समय से हमारे अपने "औसत कनेक्शन खुला समय" प्रदर्शन काउंटर बना सकते हैं, लेकिन मैं नहीं बल्कि कुछ पहले से मौजूद है का उपयोग करेंगे।

+0

क्या एसक्यूएल प्रोफाइलर इस संबंध में मदद करेगा? –

+0

@MrMoose: प्रोफाइलर ने कुछ समस्या प्रश्नों को खोजने में बहुत मदद की। लेकिन जब वे ऊपर जाते हैं और जब वे समय समाप्त करते हैं तो कनेक्शन समय की निगरानी करने के लिए मुझे कुछ विशिष्ट की आवश्यकता होती है। –

उत्तर

2

आप इस जानकारी को प्राप्त करने के लिए perfmon का उपयोग कर सकते हैं। SQL Server: General Statistics के तहत आपको User Connections मॉनिटर से अटैचमेंट करने की आवश्यकता होगी। Here is the blog post मैंने इसे पकड़ लिया। यह आपको बताएगा कि किस समय कनेक्शन कनेक्शन खुले रह रहे हैं।

इसके बाद आप आवेदन कार्यों के साथ कि सहसंबंधी (अर्थात सामान आप आवेदन में कर रहे हैं जब आप उन्हें लगातार देख चढ़ाई) की आवश्यकता होगी।

कर लेने के बाद कि तुम एक using बयान के अंदर उन कनेक्शन प्राप्त करना चाहते करने जा रहे हैं अगर आप पहले से नहीं है:

using (SqlConnection cn = new SqlConnection("some connection string")) 
{ 
    cn.Open(); 
    ... 
} 

ऐसा करके आप एक Close जारी करने की जरूरत नहीं होगी और आपको उनके बारे में चिंता करने की ज़रूरत नहीं होगी।

संक्षेप में, प्रदर्शन काउंटर आपको उस समस्या के कोड को ट्रैक करने में मदद कर सकता है जो समस्या उत्पन्न कर रहा है, लेकिन यह प्रति पंक्ति के नीचे नहीं होगा, यह वहां से थोड़ा और प्रयास करेगा।

+0

धन्यवाद, लेकिन मैं आवेदन कनेक्शन डीपोसल के बारे में चिंतित नहीं हूं। मुझे पूरा यकीन है कि हमारी डेटा ऑब्जेक्ट सही तरीके से कर रही है। मैं सोच रहा हूं कि कभी-कभी डेटाबेस से कनेक्ट करने में लंबा समय लगता है। विशेष रूप से, मैं perfmon के माध्यम से कनेक्शन प्राप्त करने के समय की निगरानी करना चाहता हूं, इसलिए मैं लंबित I/O या CPU उपयोग या जैसे किसी प्रकार के डेटाबेस नंबरों पर कनेक्शन अधिग्रहण के समय में स्पाइक्स से मिलान कर सकता हूं। मुझे अपना खुद का काउंटर बनाने के अलावा ऐसा करने का कोई और तरीका नहीं दिख रहा है। –