2011-01-05 28 views
5

वर्तमान में हमारे हाथों में थोड़ी सी स्थिति है - ऐसा लगता है कि कोई, कहीं कोड में कनेक्शन बंद करना भूल गया है। परिणाम यह है कि कनेक्शन का पूल अपेक्षाकृत जल्दी समाप्त हो गया है। एक अस्थायी पैच के रूप में हमने वेब सेवा पर हमारी कनेक्शन स्ट्रिंग में Max Pool Size = 500; जोड़ा, और जब तक हम इसे समझ नहीं लेते, तब तक सभी कनेक्शन खर्च होने पर रीसायकल पूल जोड़ा जाता है।पूल में सभी कनेक्शन उपयोग में हैं

अब तक हम यह किया है:

SELECT SPId 
FROM MASTER..SysProcesses 
WHERE DBId = DB_ID('MyDb') and last_batch < DATEADD(MINUTE, -15, GETDATE()) 

SPID के 15 मिनट के लिए इस्तेमाल नहीं कर रहे हैं पाने के लिए। कनेक्शन हेरफेर के सम्बन्ध में आधार स्तर पर या तो कुछ अर्थ

DBCC INPUTBUFFER(61) 

लेकिन प्रश्नों से प्रदर्शित विभिन्न रहे हैं, टूट गया था, या हमारे कटौती गलत है: अब हम क्वेरी है कि पिछले मार डाला गया था के साथ उस SPID का उपयोग कर पाने के लिए कोशिश कर रहे हैं। ..

क्या हमारी सोच में कोई त्रुटि है? क्या डीबीसीसी/sysprocesses परिणाम देते हैं जो हम उम्मीद कर रहे हैं या क्या कुछ साइड इफेक्ट कैच है? (उदाहरण के लिए, पूल प्रभाव में कनेक्शन?)

(कृपया, क्या हम के बाद से लोगों को लगता है कि कोड किया कई और सभी उपस्थित नहीं अभी हैं एसक्यूएल का उपयोग कर पता लगा करने के लिए छड़ी)

+3

'कोड वाले लोग बहुत सारे हैं और अभी सभी मौजूद नहीं हैं .. मुझे नहीं लगता कि वे वहां मौजूद थे जब वे अपने एसक्यूएल कनेक्शन बंद करना भूल गए थे। ;) –

+0

आपके पास स्रोत कोड सही है? सभी कनेक्शन खोलने और उन्हें बंद करने के लिए देखना कठिन नहीं होना चाहिए, बशर्ते वे जानबूझकर कनेक्शन को पास नहीं कर रहे हैं ... –

+1

@ विल्ल @ मिच - आप * कोड नहीं देखना चाहते हैं, मेरा विश्वास करो :) लेकिन, आखिरकार, अंत में यह एकमात्र विकल्प था ... और हमने इसे हर जगह कोशिश करने के लिए अंततः {करीबी} डालकर तय किया ... – veljkoz

उत्तर

2

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

जैसा कि मिच सुझाव देता है, आपको कनेक्शन-खुलने के लिए अपने स्रोत को खराब करने की आवश्यकता है और सुनिश्चित करें कि वे स्थानीयकरण और उपयोग() में लिपटे हैं। संभावित रूप से लंबे समय तक रहने वाली वस्तुओं की भी तलाश करें जो कनेक्शन पर हो सकती हैं। हमारे कैटलॉग एएसपी पेज ऑब्जेक्ट्स के शुरुआती संस्करण में ऐसे कनेक्शन होते थे जिन्हें ठीक से प्रबंधित नहीं किया गया था।

इसे कम करने के लिए, क्या आप अपने ऐप के विशिष्ट हिस्सों पर ध्यान केंद्रित करते समय कनेक्शन-गणना (परफमन) की निगरानी कर सकते हैं? क्या यह सीआरयूडी क्षेत्रों बनाम रिपोर्टिंग या अन्य प्रश्नों में अधिक होता है? इससे आपको स्रोत-स्कोअर को कम करने में मदद मिल सकती है।

+0

बेतरतीब ढंग से कोड के माध्यम से जाकर और हर जगह डालने के बाद 'कोशिश करें - अंत में {conn.Close()}' हम इस मुद्दे को सहेजने में कामयाब रहे ... विरोधी पैटर्न नियंत्रक वर्ग का डिज़ाइन (** ** **) एक डरावनी था ... सुबह में स्पैंकिंग होगी जो निश्चित रूप से है;) सभी को धन्यवाद ... – veljkoz

+0

@ मिच: यदि यह .NET का डीबी कनेक्शन है तो फाइनलजर निपटान करेगा जो अप्रबंधित संसाधनों को मुक्त करेगा। यह जीसी समय के कारण अनिश्चित समय पर होता है। – n8wrl

+0

@veljkoz: आपको शायद यह पता है, लेकिन आप() ब्लॉक का उपयोग करने में अपने कनेक्शन को लपेटकर कुछ टाइपिंग सहेज सकते हैं जो प्रभावी रूप से आपके लिए प्रयास/आखिरकार करते हैं। – n8wrl

1

क्या आप कनेक्शन फ़ील्ड में कनेक्शन कहां और क्यों बनाया गया था, इस बारे में जानकारी रखने के लिए कनेक्शन स्ट्रिंग को बदलने में सक्षम हैं?

+0

मुझे यकीन नहीं है कि आपका क्या मतलब है?क्या आप एक उदाहरण दे सकते हैं? – veljkoz

+1

आप 128 वर्णों की एक "एप्लिकेशन नाम" संपत्ति प्रदान कर सकते हैं जो SQL में प्रदर्शित होता है - यह डीबगिंग नकली कनेक्शन को अधिक आसान बना सकता है (ऐप में प्रत्येक अद्वितीय स्थान में जहां कनेक्शन बनाया गया है, एक अलग नाम का उपयोग करें)। Http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx देखें। –

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