SQL सर्वर 2012 मानक संस्करण में, मुझे पता है कि उपयोगकर्ता कनेक्शन की अधिकतम संख्या 32,767 है। यदि मैं इस संख्या की ओर जा रहा हूं तो मुझे डीबीए के रूप में क्या करना चाहिए?
वर्तमान में 30,000 उपयोगकर्ता कनेक्शन हैं, और यह संख्या बढ़ने की उम्मीद है।
SQL सर्वर 2012 मानक संस्करण में, मुझे पता है कि उपयोगकर्ता कनेक्शन की अधिकतम संख्या 32,767 है। यदि मैं इस संख्या की ओर जा रहा हूं तो मुझे डीबीए के रूप में क्या करना चाहिए?
वर्तमान में 30,000 उपयोगकर्ता कनेक्शन हैं, और यह संख्या बढ़ने की उम्मीद है।
जवाबों:
कनेक्शन की अधिकतम संख्याSQL सर्वर संस्करण और संस्करणों 32,767 है।
आप यह निर्धारित कर सकते हैं कि SQL सर्वर वर्तमान में कितने कनेक्शन देख रहा है:
SELECT ConnectionStatus = CASE WHEN dec.most_recent_sql_handle = 0x0
THEN 'Unused'
ELSE 'Used'
END
, CASE WHEN des.status = 'Sleeping'
THEN 'sleeping'
ELSE 'Not Sleeping'
END
, ConnectionCount = COUNT(1)
FROM sys.dm_exec_connections dec
INNER JOIN sys.dm_exec_sessions des ON dec.session_id = des.session_id
GROUP BY CASE WHEN des.status = 'Sleeping'
THEN 'sleeping'
ELSE 'Not Sleeping'
END
, CASE WHEN dec.most_recent_sql_handle = 0x0
THEN 'Unused'
ELSE 'Used'
END;
यदि उपरोक्त क्वेरी से उपयोग किए गए और अप्रयुक्त कनेक्शन के बीच का अनुपात संबंधित है, तो यह संभव है कि कनेक्शन पूलिंग क्लाइंट सर्वर से जुड़े अनुप्रयोगों द्वारा सक्षम हो, और उन कनेक्शनों को कुशलता से उपयोग नहीं किया जा रहा है। आप चाहते हैं कि डेवलपर्स कनेक्शन पूल के आकार को सीमित करने के लिए इन अनुप्रयोगों के लिए कनेक्शन स्ट्रिंग को संशोधित करें, और सुनिश्चित करें कि वे ठीक से कनेक्शन का निपटान कर रहे हैं। यदि कनेक्शन सही ढंग से निपटाए नहीं जा रहे हैं, तो वे तब तक खुले रहेंगे जब तक क्लाइंट एप्लिकेशन चल रहा है।
यदि आप विशेष रूप से पागल महसूस कर रहे हैं, और उन सभी कनेक्शनों से छुटकारा पाने की आवश्यकता है, जिन्होंने हाल ही में कुछ भी नहीं किया है (भले ही वे वास्तव में वर्तमान में काम कर रहे हों), तो आप निम्नलिखित कोड चला सकते हैं, जो सत्रों की एक सूची तैयार करेगा। मारा जा सकता है। आपको वास्तव में कमांड चलाने के लिए एक नई SSMS विंडो में उत्पन्न कमांड को कॉपी-पेस्ट करना होगा। मैं यह भी सलाह दूंगा कि आपके मामले में अप-टू-डेट हो ।
DECLARE @cmd NVARCHAR(MAX); SET @cmd = ''; SELECT @cmd = @cmd + CASE WHEN @cmd = '' THEN '' ELSE CHAR(13) + CHAR(10) END + 'KILL ' + CONVERT(VARCHAR(MAX), dec.session_id) + ';' FROM sys.dm_exec_connections dec WHERE dec.most_recent_sql_handle = 0x0;
PRINT @cmd;
कई SQL सर्वर नोड्स में डेटा को तेज करके 32,767 से परे कनेक्शन की संख्या को रैखिक रूप से स्केल करना संभव है। हालांकि, मेरी राय में, कनेक्शन की संख्या पर सीमा के चारों ओर जाने के तरीके के रूप में शार्किंग का उपयोग करना मकड़ी को मारने के लिए परमाणु बम का उपयोग करने के समान है। यह मकड़ी को मार देगा , लेकिन आपको दिन के अंत में बड़ी समस्याएं हो सकती हैं। यह उल्लेख करने के लिए नहीं है कि यह परमाणु बम बनाने के लिए बहुत कठिन है, ठीक से लागू करने का उल्लेख नहीं है।
is_user_process
क्वालीफायर में जोड़ना एक अच्छा विचार होगा, और निश्चित रूप से उन सत्रों को बाहर करने के लिए चोट नहीं पहुंचेगी last_request_start_time
जो हाल ही में हुए हैं। कैसे हाल? एक और अच्छा सवाल।
मैंने अतीत में कनेक्शन पूलिंग के साथ अजीब व्यवहार में भाग लिया है, और आपका परिदृश्य उन स्थितियों में से एक के साथ अच्छी तरह से संरेखित करता है। यदि आपका आवेदन कनेक्शन पूलिंग का उपयोग कर रहा है (और यह अभी भी अटकलें हैं, इस बिंदु पर, जब तक आप इसकी पुष्टि या इनकार नहीं करते हैं) तब आपके पास कई कनेक्शन होने वाले हैं जो खुले रहते हैं। यह डिजाइन द्वारा है।
कनेक्शन पूलिंग का उद्देश्य डेटाबेस कनेक्शन बनाने के ओवरहेड को कम करना है। उदाहरण के लिए, आइए 3. का एक कनेक्शन पूल। जहाँ तक मैं बता सकता हूँ कि जीवनचक्र कुछ इस तरह से चलता है (कोल्ड कनेक्शन पूल कैश से शुरू):
sp_reset_connection
थ्रेड 1 पर कनेक्शन पूल समस्याएँयह एक निरीक्षण है, लेकिन मुख्य बिंदुओं में शामिल हैं:
sp_reset_connection
कहा जाता है।यहाँ संदर्भ सामग्री है जो मैं इन निष्कर्षों पर आया करता था।