2012-08-09 10 views
6

पर खुले कनेक्शन की संख्या पाएं मेरा वेब एप्लिकेशन एएसपीनेट 2.0, सी # 2.0 और एसक्यूएल सर्वर 208 में है, मैं अपने एसक्यूएल सर्वर 2008 डेटाबेस पर खुले कनेक्शन की संख्या कैसे प्राप्त कर सकता हूं। और क्या कनेक्शन साफ़ करने का कोई तरीका है pool.because मेरी साइट साझा होस्टिंग पर होस्ट की गई है और उन्होंने सीमित कनेक्शन प्रदान किए हैं। मेरे कोडिंग में मैंने उपयोग के बाद सभी कनेक्शन बंद कर दिए हैं, लेकिन फिर भी मुझे डेटाबेस को निलंबित करने के लिए चेतावनी मिल रही है।डेटाबेस

क्या कोई मुझे बता सकता है कि डेटाबेस पर नंबर खुला कनेक्शन कैसे ढूंढें और कनेक्शन पूल को कैसे साफ़ करें।

मैंने कनेक्शन के लिए कथन का उपयोग किया और आखिरकार ब्लॉक में उपयोग किए जाने के बाद सभी कनेक्शन बंद कर दिए। इसलिए त्रुटि होने पर यह ओपेड कनेक्शन बंद कर देता है।

अग्रिम धन्यवाद।

+1

क्या RDBMS के लिए विशिष्ट करना चाहते हैं? AFAIK, ऐसा करने का एकमात्र तरीका डेटाबेस सेवा से सीधे पूछताछ करना है और यह प्रत्येक स्वाद के लिए व्यापक रूप से भिन्न है। –

+0

यदि आप केवल डिबगिंग कर रहे हैं, तो 'sp_who2' –

+0

sp_who2 लॉगिन उपयोगकर्ता के बारे में विवरण देता है, लेकिन इसके वेब एप्लिकेशन के रूप में एक ही उपयोगकर्ता डेटाबेस पर अधिक कनेक्शन खोल सकता है।मैं अपने वेब एप्लिकेशन का उपयोग कर डेटाबेस पर खोले गए कनेक्शन की संख्या चाहता हूं और यह एएसपीनेट है। –

उत्तर

1

आप कनेक्शन पूलिंग पर भी पढ़ सकते हैं: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

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

कनेक्शन पूल साफ़ करने के लिए, SqlConnection ऑब्जेक्ट ClearPool() और ClearAllPool() `विधियों को प्रदान करता है। हालांकि, एक व्यक्तिगत कनेक्शन बंद नहीं किया जाएगा और पूल से हटा दिया जाएगा जब तक कि यह बंद या निपटान न हो जाए।

IDisposable को लागू करने वाले एसक्यूएल क्वेरी के निष्पादन में शामिल सभी विभिन्न वस्तुओं को using कथन में उचित उचित निपटान के लिए लपेटा जाना चाहिए। इन पंक्तियों के साथ कुछ:

IEnumerable<BusinessObject> list = new List<BusinessObject>() ; 

using (SqlConnection connection = new SqlConnection(credentials)) 
using (SqlCommand  command = connection.CreateCommand()) 
using (SqlDataAdapter adapter = new SqlDataAdapter(command)) 
using (DataSet  results = new DataSet()) 
{ 

    command.CommandType = CommandType.StoredProcedure ; 
    command.CommandText = @"someStoredProcedure" ; 

    try 
    { 
    connection.Open() ; 
    adapter.Fill(results) ; 
    connection.Close() ; 

    list = TransformResults(results) ; 

    } 
    catch 
    { 
    command.Cancel() ; 
    throw 
    } 

} 

return list ; 

आप जांच कर सकते हैं क्या SPIDs Sql सर्वर में खुले या तो संग्रहीत प्रक्रिया sp_who क्रियान्वित (SQL सर्वर में उचित व्यवस्थापक अनुमतियों होना आवश्यक है) द्वारा कर रहे हैं। आप परफोन का भी उपयोग कर सकते हैं।

+0

हाय निकोलस, उत्तर के लिए धन्यवाद। हां, मैंने आखिरकार ब्लॉक में कनेक्शन, कमांड और बंद और डिस्पोजेड कनेक्शन के लिए कथन का उपयोग किया था, मैंने न्यूनतम पूल आकार 0 के रूप में और अधिकतम पूल आकार को 10 के रूप में भी अनुमति दी है लेकिन अभी भी डेटाबेस पर 200 से अधिक कनेक्शन खोले गए हैं और लोगों को होस्ट कर रहे हैं इस बारे में शिकायत कर रहे हैं। क्या आप कृपया मुझे बता सकते हैं कि अगर मैं SqlConnection.ClearAllPool() का उपयोग करता हूं और इसका उपयोग कहां किया जाए तो क्या होगा। –

8

यह प्रत्येक डीबी प्रति कनेक्शन की संख्या पता चलता है:

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NoOfConnections, 
    loginame as LoginName 
FROM 
    sys.sysprocesses 
WHERE 
    dbid > 0 
GROUP BY 
    dbid, loginame 

और यह कुल कनेक्शन देता है:

SELECT 
    COUNT(dbid) as TotalConnections 
FROM 
    sys.sysprocesses 
WHERE 
    dbid > 0 

ग # से, आप का पालन कर सकते हैं:
http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx एक और अच्छा संदर्भ हो सकता है यहां मिला:
http://www.wduffy.co.uk/blog/monitoring-database-connections/

,210

कॉल स्थिर विधि ReleaseObjectPoolOleDbConnection पर - देख http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.releaseobjectpool.aspx

+0

हाय नितिन, उत्तर के लिए धन्यवाद, लेकिन sys.sysprocesses से कुल कनेक्शन के रूप में COUNT (डीबीआईडी) चुनें जहां dbid> 0 एक देता है लेकिन डेटाबेस पर 25 कनेक्शन खोले जाते हैं। NoOfConnections रूप DB_NAME (DBID) DBNAME के ​​रूप में, COUNT (DBID), LOGINNAME रूप loginame sys.sysprocesses से चयन कहां DBID> 0 द्वारा समूह के DBID, loginame और 1 –

+0

के रूप में यह भी खोला देता है कनेक्शन मेरे समाधान के अंत में संपादित किया गया है, कृपया इसे भी कोशिश करें –

+1

@RD SysAdmin के रूप में लॉग इन करने का प्रयास करें – Zsmaster

2

SQL क्वेरी वर्तमान सक्रिय कनेक्शन

SELECT DB_NAME(dbid) as 'DbNAme', COUNT(dbid) as 'Connections' from master.dbo.sysprocesses with (nolock) WHERE dbid > 0 GROUP BY dbid 

आप DBID परिभाषित कर सकते हैं पाने के लिए यदि आप कनेक्शन डेटाबेस