मैक्स कनेक्शन पूल 100 पर छाया हुआ है


27

मैं Windows Server 2008 बॉक्स पर SQL Server 2008 R2 SP1 चला रहा हूं। मेरे पास Visual Studio 2010 से चलने वाली .NET स्क्रिप्ट है जो निम्नलिखित कार्य करती है:

  • डेटाबेस में पहुँचता है
  • एक बदलाव करता है
  • दोहराता

इसे पुनरावृत्त करने की कुल संख्या 150 है, हालांकि यह 100 कनेक्शनों पर रोक रहा है और मैं इसका पता नहीं लगा सकता। मैं अपनी स्क्रिप्ट को केवल एक सूत्र का उपयोग करने के लिए समायोजित कर सकता हूं, लेकिन मैं यह जानना पसंद करूंगा कि मैं अधिकतम कनेक्शन सेटिंग को कहां गुम कर रहा हूं क्योंकि भविष्य के संदर्भ के लिए जानना अधिक उपयोगी होगा।

यहाँ मैंने अभी तक जाँच की है:

  • दृश्य स्टूडियो 2010 में SQL कनेक्शन स्ट्रिंग (यह 1000 पर सेट है)
  • SSMS डेटाबेस उदाहरण कनेक्शन गुण (यह 0 [अनंत] उपयोगकर्ता कनेक्शन के लिए सेट है)
  • सर्वर 2008 की कुछ जानकारियों को देखा जाए तो ऐसा लगता है कि यह 100 से अधिक कनेक्शनों को संभाल सकता है
  • SP_WHO2152 कोडों पर "मैक्स पूलेड कनेक्शंस के साथ स्क्रिप्ट त्रुटि" 52 पर शुरू होता है और यह देखते हुए कि तार्किक कनेक्शनों के बारे में अधिक जानकारी देने वाले मेरे कोड के माध्यम से कदम बढ़ाए गए हैं।
  • उपयोग करने के लिए कनेक्शन स्ट्रिंग को बदल दिया Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000

मुझे यकीन नहीं है कि और कहां जांचना है, मुझे पता है कि मेरे पास बहुत सारे चलती भागों हैं, लेकिन मुझे लग रहा है कि मुझे बस एक अधिकतम पूल सेटिंग की याद आ रही है।


1
क्या आप अपना कनेक्शन स्ट्रिंग पोस्ट कर सकते हैं? कृपया मेरा उत्तर देखें। यह आपका उपाय होना चाहिए (यह मान कनेक्शन स्ट्रिंग में निर्दिष्ट किया जाएगा। System.Data.SqlClient100 तक की चूक, यही वजह है कि आपको कनेक्शन पूल की थकावट दिखाई देती है)।
थॉमस स्ट्रिंगर

जवाबों:


24

SQL सर्वर डिफ़ॉल्ट रूप से अधिकतम 32767 कनेक्शन की अनुमति देता है । इसका उपयोग करके बदला जा सकता है sp_configure। इस सेटिंग के लिए अपना वर्तमान कॉन्फ़िगरेशन देखने के लिए, निम्नलिखित क्वेरी का उपयोग करें:

select * from sys.configurations
where name ='user connections'

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

आपको यह भी समीक्षा करनी चाहिए कि वास्तव में कितने कनेक्शन किए जा रहे हैं , क्योंकि आपके आवेदन के बाहर अधिक गतिविधि हो सकती है (या आपका आवेदन आपके विचार से अधिक कनेक्शन बना रहा है)। आप सामान्य सांख्यिकी को देखना चाहेंगे -> परफ्यूम में लॉजिकल कनेक्शंस या तो सम्‍मिलित हैं या sys.dm_os_performance_counters(cntr_value समय मान में वर्तमान बिंदु दिखाएगा) मानों को क्वेरी करें :

select * from sys.dm_os_performance_counters
where counter_name ='User Connections'

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

मैंने अपने प्रश्न को थोड़ा और स्पष्ट कर दिया है जो मैंने उठाए हैं। यह SQL में एक सेटिंग नहीं हो सकती है, यही वजह है कि मैंने विंडोज और विजुअल स्टूडियो सेटिंग्स को देखना शुरू कर दिया है।
सीन लांग

1
यदि आपने वह सब चेक कर लिया है और यह अभी भी 100 कनेक्शन पर विफल है, तो उत्तर डेटाबेस सेटिंग्स के बाहर स्थित है। FYI करें, उन 51 कनेक्शनों में सभी सिस्टम प्रोसेस (अपने लिए +1) हैं।
माइक फाल

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

25

अपने कनेक्शन स्ट्रिंग में, निर्दिष्ट करें max pool size=<your desired max pool size>। तो दूसरे शब्दों में, यदि आप अधिकतम पूल आकार को मूल्य 500 में बदलना चाहते हैं, तो आपका कनेक्शन स्ट्रिंग इस प्रकार हो सकता है:

"data source=your_server; initial catalog=your_db; trusted_connection=true; max pool size=500"

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

इसके अलावा, सुनिश्चित करें कि आप अपने कनेक्शन को ठीक से बंद या डिस्पोज़ कर रहे हैं, अन्यथा आप कनेक्शन टाई करेंगे। कुछ इस तरह (C #):

string connectionString = "data source=your_server; initial catalog=your_db; trusted_connection=true; max pool size=500";

using (SqlConnection dbConn = new SqlConnection(connectionString))
{
    using (SqlCommand sqlCmd = new SqlCommand())
    {
        sqlCmd.Connection = dbConn;
        sqlCmd.CommandText = "select 1;";

        // ... so on and so forth
    }
}

usingब्लॉक (सी # में) कॉल IDisposable.Dispose()पूरा होने पर। आप किसी ब्लॉक के ब्लॉक में भी लागू SqlConnection.Dispose()कर सकते हैं ।SqlConnection.Close()finallytry/catch/finally

संदर्भ: SqlConnection.ConnectionString संपत्ति पर MSDN प्रलेखन


यहाँ कनेक्शन स्ट्रिंग है, मेरे प्रश्न को भी अपडेट करना। Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000
सीन लॉन्ग

3
क्या आपका कनेक्शन हर जगह है ? मैं जो कारण पूछता हूं, वह यह है कि विभिन्न कनेक्शन तार अलग कनेक्शन पूल होने जा रहे हैं।
थॉमस स्ट्रिंगर

यह एक बहुत अच्छा सवाल है। मैंने अब तक 3 कनेक्शन स्ट्रिंग की जाँच की, लेकिन वे सभी एक उच्च अधिकतम पूल के लिए जोर दे रहे हैं। मैं देखूंगा कि क्या मुझे कोई अन्य स्ट्रिंग मिल सकती है जो इसका कारण हो सकती है।
सीन लॉन्ग

यदि आप निष्पादन को SqlConnection.ConnectionStringसमाप्त करते हैं , तो आपको यह देखने में सक्षम होना चाहिए कि किसी विशेष ऑपरेशन के लिए रनटाइम मान क्या है। यह सबसे आसान तरीका होगा। अगर max pool sizeवहाँ नहीं है, तो यह 100 है।
थॉमस स्ट्रिंगर

1
इसे स्वीकृत उत्तर के रूप में चिह्नित किया जाना चाहिए क्योंकि यह वास्तव में ओपी का सही उत्तर देता है। उन्होंने क्लाइंट कॉन स्ट्रिंग मैक्स पूल साइज पैरामीटर और कनेक्शन को बंद / डिस्पोज करने की आवश्यकता दोनों का उल्लेख किया है।
एडम कैविनेस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.