Ms sql सर्वर 2005 में खुले / सक्रिय कनेक्शन की कुल संख्या का निर्धारण कैसे करें


90

My PHP / MS Sql Server 2005 / जीत 2003 आवेदन कभी-कभी बहुत अनुत्तरदायी हो जाता है, मेमोरी / सीपीयू उपयोग स्पाइक नहीं करता है। यदि मैं sql प्रबंधन स्टूडियो से किसी भी नए कनेक्शन को खोलने की कोशिश करता हूं, तो यह सिर्फ खुले कनेक्शन संवाद बॉक्स में लटका हुआ है। कैसे सक्रिय कनेक्शन की कुल संख्या एमएस sql सर्वर 2005 की पुष्टि करने के लिए

जवाबों:


268

यह प्रत्येक DB के कनेक्शन की संख्या दर्शाता है:

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

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

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

यदि आपको अधिक विवरण की आवश्यकता है, तो चलाएं:

sp_who2 'Active'

नोट: उपयोग किए जाने वाले SQL सर्वर खाते को 'sysadmin' भूमिका की आवश्यकता होती है (अन्यथा यह केवल एक पंक्ति और परिणाम के रूप में 1 की गिनती दिखाएगा)


1
बहुत बहुत धन्यवाद। मेरे जैसे नौसिखियों के लिए, SQL सर्वर प्रबंधन स्टूडियो शुरू करें, अपने डेटाबेस पर राइट क्लिक करें, न्यू क्वेरी का चयन करें, इसे पेस्ट करें और "जाओ!" बटन पर क्लिक करें।

8
इसे न तो स्वीकार किया जाना चाहिए, न ही उच्चतम मतदान का जवाब क्योंकि यह केवल गलत है। यदि आप लॉग इन हैं तो आप केवल दिए गए नंबर पर भरोसा कर सकते हैं sa। यदि आप एक गैर-सा उपयोगकर्ता के रूप में लॉग इन हैं, तो आपको 1 दिखाई देगा और वह वास्तविक कनेक्शन का प्रतिनिधि नहीं होगा।
अंजीह

3
@ajeh: यह निहित है कि आपके पास कार्य को करने के लिए पर्याप्त अनुमति है। आपकी टिप्पणी बेमानी है।
मिच गेहूं

2
@ IEBasara: यह निहित है। आप एक गैर-व्यवस्थापक से ऐसी जानकारी देखने में सक्षम होने की उम्मीद क्यों करेंगे?
मिच गेहूं

1
पार्टी के लिए देर से .. लेकिन .. sysadminभूमिका की आवश्यकता (टिप्पणी संपादित करें) ने मेरे बटॉक्स को बचाया। मैं यह मानकर 1 रखता था कि मेरे पास सही परमिट हैं। ओह! तय किया और बोला। जीत : money_with_wings:
शुद्ध। क्रोम

7

जैसा कि @jwalkerjr ने उल्लेख किया है, आपको कोड में कनेक्शन का निपटान करना चाहिए (यदि कनेक्शन पूलिंग सक्षम है, तो वे कनेक्शन पूल में वापस आ जाते हैं)। ऐसा करने का निर्धारित तरीका ' using' कथन का उपयोग कर रहा है :

// Execute stored proc to read data from repository
using (SqlConnection conn = new SqlConnection(this.connectionString))
{
    using (SqlCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "LoadFromRepository";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@ID", fileID);

        conn.Open();
        using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
        {
            if (rdr.Read())
            {
                filename = SaveToFileSystem(rdr, folderfilepath);
            }
        }
    }
}

पूछने वाले ने उल्लेख किया कि वे PHP का उपयोग कर रहे हैं, इसलिए कोड नमूना उनके लिए उपयुक्त नहीं हो सकता है। कचरा संग्रहकर्ता को गैर-सतत SQL सर्वर कनेक्शन को स्वचालित रूप से साफ करना चाहिए जब उनके लिए अधिक संदर्भ नहीं होते हैं (और सभी संदर्भों को पृष्ठ चक्र के अंत में हटा दिया जाएगा), लेकिन हो सकता है कि पूछनेवाला लगातार कनेक्शन का उपयोग कर रहा है, जिसके लिए बुद्धिमान कनेक्शन की आवश्यकता होती है पुन: उपयोग।
पॉल डी'अवेउल

5

प्रत्येक कनेक्शन पूल के लिए एक सटीक गिनती प्राप्त करने के लिए इसका उपयोग करें (प्रत्येक उपयोगकर्ता / होस्ट प्रक्रिया एक ही कनेक्शन स्ट्रिंग का उपयोग करता है)

SELECT 
DB_NAME(dbid) as DBName, 
COUNT(dbid) as NumberOfConnections,
loginame as LoginName, hostname, hostprocess
FROM
sys.sysprocesses with (nolock)
WHERE 
dbid > 0
GROUP BY 
dbid, loginame, hostname, hostprocess

4

मुझे पता है कि यह पुराना है, लेकिन सोचा कि अपडेट करना अच्छा होगा। यदि एक सटीक गणना की आवश्यकता है, तो कॉलम ईसीआईडी ​​को संभवतः फ़िल्टर किया जाना चाहिए। समानांतर धागे वाला एक SPID sysprocesses में कई बार दिखा सकता है और ECID = 0 को फ़िल्टर करने से प्रत्येक SPID के लिए प्राथमिक थ्रेड वापस आ जाएगा।

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses with (nolock)
WHERE 
    dbid > 0
    and ecid=0
GROUP BY 
    dbid, loginame

1

यदि आपका PHP ऐप कई SQL सर्वर कनेक्शन को खोल रहा है, तो, जैसा कि आप जानते हैं, आपको अपने ऐप के डेटाबेस कोड के साथ समस्या है। यह कनेक्शन पूलिंग के उपयोग और उपयोग के बाद उन कनेक्शनों को जारी करना / निपटाना होना चाहिए। विषय पर एक सभ्य लेख के लिए यहाँ एक नज़र है ...

http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx


0

देखें sp_who यह आपको केवल कनेक्शन की संख्या देखने से अधिक विवरण देता है

आपके मामले में मैं ऐसा कुछ करूंगा

 DECLARE @temp TABLE(spid int , ecid int, status varchar(50),
                     loginname varchar(50),   
                     hostname varchar(50),
blk varchar(50), dbname varchar(50), cmd varchar(50), request_id int) 
INSERT INTO @temp  

EXEC sp_who

SELECT COUNT(*) FROM @temp WHERE dbname = 'DB NAME'

0

MS SQL ज्ञान आधारित - कैसे खुला SQL डेटाबेस कनेक्शन (ओं) को जाने और किस होस्ट पर कब्जा किया।

नीचे क्वेरी का उपयोग करके आपको सूची डेटाबेस, होस्ट नाम और ओपन कनेक्शन काउंट की कुल संख्या मिलेगी, इसके आधार पर आपको पता चलेगा कि किस होस्ट ने SQL कनेक्शन पर कब्जा कर लिया है।

SELECT DB_NAME(dbid) as DBName, hostname ,COUNT(dbid) as NumberOfConnections
FROM sys.sysprocesses with (nolock) 
WHERE dbid > 0 
and len(hostname) > 0 
--and DB_NAME(dbid)='master' /* Open this line to filter Database by Name */
Group by DB_NAME(dbid),hostname
order by DBName

0
SELECT
[DATABASE] = DB_NAME(DBID), 
OPNEDCONNECTIONS =COUNT(DBID),
[USER] =LOGINAME
FROM SYS.SYSPROCESSES
GROUP BY DBID, LOGINAME
ORDER BY DB_NAME(DBID), LOGINAME
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.