Domanda

Il mio PHP / MS Sql Server 2005 / win 2003 A volte l'applicazione non risponde molto, l'utilizzo della memoria / CPU non aumenta. Se provo ad aprire una nuova connessione da sql management studio, allora si blocca nella finestra di dialogo di connessione aperta. come determinare il numero totale di connessioni attive ms sql server 2005

È stato utile?

Soluzione

Questo mostra il numero di connessioni per ciascun DB:

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

E questo dà il totale:

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

Se hai bisogno di maggiori dettagli, esegui:

sp_who2 'Active'

Nota: l'account SQL Server utilizzato richiede il ruolo "amministratore di sistema" (altrimenti mostrerà solo una riga e un conteggio di 1 come risultato)

Altri suggerimenti

Come accennato da @jwalkerjr, dovresti eliminare le connessioni nel codice (se il pool di connessioni è abilitato, vengono appena restituite al pool di connessioni). Il modo prescritto per farlo è usare l'istruzione " 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);
            }
        }
    }
}

So che è vecchio, ma ho pensato che sarebbe una buona idea aggiornarlo. Se è necessario un conteggio accurato, probabilmente anche la colonna ECID dovrebbe essere filtrata. Uno SPID con thread paralleli può essere visualizzato più volte nei processi di sistema e il filtro ECID = 0 restituirà il thread primario per ogni 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

Utilizzalo per ottenere un conteggio accurato per ogni pool di connessioni (supponendo che ogni processo utente / host utilizzi la stessa stringa di connessione)

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

Se l'app PHP tiene aperte molte connessioni di SQL Server, allora, come forse saprai, hai un problema con il codice del database dell'app. Dovrebbe essere il rilascio / eliminazione di tali connessioni dopo l'uso e l'utilizzo del pool di connessioni. Dai un'occhiata qui per un articolo decente sull'argomento ...

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

vedi sp_who ti dà più dettagli che vedere solo il numero di connessioni

nel tuo caso farei qualcosa del genere

 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'

Basata sulla conoscenza di MS SQL - Come sapere connessioni di database SQL aperte e occupate su quale host.

Usando la query seguente troverai il database degli elenchi, il nome host e il numero totale di conteggi di connessioni aperte, in base a ciò avrai idea di quale host abbia occupato la connessione 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top