2012-08-09 15 views
6

La mia applicazione web è in asp.net 2.0, C# 2.0 e sql server 208 come posso trovare il numero di connessioni aperte sul mio database SQL Server 2008. E c'è un modo per cancellare la connessione pool.perché il mio sito è ospitato su hosting condiviso e hanno fornito connessioni limitate. Nella mia codifica ho chiuso tutte le connessioni dopo l'uso, ma continuo a ricevere avvisi per la sospensione del database.trovare il numero di connessione aperta sul database

Qualcuno può dirmi come trovare il numero di connessioni aperte sul database e come cancellare il pool di connessioni.

ho usato le istruzioni per le connessioni e ho chiuso tutte le connessioni dopo l'utilizzo nel blocco finally. quindi anche se c'è un errore, chiude le connessioni oped.

Grazie in anticipo.

+1

Cosa RDBMS? AFAIK, l'unico modo per farlo è interrogare direttamente il servizio del database e questo è molto diverso per ogni gusto. –

+0

Se si sta eseguendo il debug, provare a 'sp_who2' –

+0

sp_who2 fornisce dettagli sull'utente di accesso, ma come sua applicazione web lo stesso utente può aprire più connessioni sul database.Voglio il numero di connessioni aperte sul database usando la mia applicazione web ed è asp.net. –

risposta

1

Si potrebbe desiderare di leggere su pool di connessioni: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

viene creato un pool di connessioni separato per ogni stringa di connessione distinti. Inoltre, se si effettua la connessione tramite la sicurezza integrata e il proprio sito Web utilizza l'autenticazione di base o di Windows (anziché quella anonima), verrà creato un pool di connessioni separato per ciascun utente del sito Web.

Per cancellare i pool di connessione, l'oggetto SqlConnection fornisce i metodi ClearPool() e ClearAllPool() `. Tuttavia, una singola connessione non verrà chiusa e rimossa dal pool finché non verrà chiusa o eliminata.

Tutti i vari oggetti coinvolti nell'esecuzione della query sql che implementa IDisposable devono essere racchiusi in una dichiarazione using per garantire uno smaltimento corretto. Qualcosa in questo senso:

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 ; 

È possibile esaminare quello SPID sono aperti in SQL Server o eseguendo la stored procedure sp_who (deve disporre delle autorizzazioni di amministratore appropriate in SQL Server). Puoi anche usare perfmon.

+0

hi Nicholas, grazie per la risposta. Sì, ho usato le istruzioni per la connessione, il comando e anche le connessioni chiuse e disposte nel blocco finally, ho anche permesso la dimensione minima del pool come 0 e la dimensione massima del pool come 10 ma ci sono ancora più di 200 connessioni aperte sul database e che ospitano persone si stanno lamentando di questo. Puoi dirmi cosa succede se uso SqlConnection.ClearAllPool() e dove questo deve essere usato. –

8

Questo mostra il numero di connessioni per ogni DB:

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

e questo dà connessioni totali:

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

da C#, è possibile seguire:
http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx Un altro buon riferimento può essere trovato a:
http://www.wduffy.co.uk/blog/monitoring-database-connections/

Chiamare il metodo statico ReleaseObjectPool sul l'OleDbConnection - vedi http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.releaseobjectpool.aspx

+0

Ciao Nitin, grazie per la risposta, ma SELECT COUNT (dbid) come TotalConnections FROM sys.sysprocesses DOVE dbid> 0 restituisce uno, ma ci sono 25 connessioni aperte sul database. SELEZIONA DB_NAME (dbid) come DBName, COUNT (dbid) come NoOfConnections, loginame come LoginName DA sys.sysprocesses DOVE dbid> 0 GROUP BY dbid, loginame e questo le connessioni anche dà aperto come 1 –

+0

fatto modifica alla fine della mia soluzione, provalo anche io –

+1

@RD Prova ad accedere come SysAdmin – Zsmaster

2

query SQL per ottenere la corrente connessione attiva

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

è possibile definire dbid se si vuole connessione specifica a base di dati

Problemi correlati