2012-08-09 8 views
6

Mi aplicación web está en asp.net 2.0, C# 2.0 y sql server 208 ¿Cómo puedo encontrar el número de conexiones abiertas en mi base de datos sql server 2008? Y ¿hay alguna forma de borrar la conexión? pool.because porque mi sitio está alojado en hosting compartido y han proporcionado conexiones limitadas. En mi codificación he cerrado toda la conexión después de su uso, pero aún recibo una advertencia para suspender la base de datos.encontrar el número de conexión abierta en la base de datos

¿Alguien me puede decir cómo encontrar el número de conexiones abiertas en la base de datos y cómo borrar el grupo de conexiones.

utilicé las declaraciones para las conexiones y cerré todas las conexiones después de usarlas en el bloque finally. así que aunque hay un error, cierra las conexiones abiertas.

Gracias de antemano.

+1

Lo RDBMS? AFAIK, la única forma de hacerlo es consultar directamente el servicio de la base de datos y esto difiere ampliamente para cada sabor. –

+0

Si solo está depurando, intente 'sp_who2' –

+0

sp_who2 proporciona detalles sobre el usuario de inicio de sesión, pero como es una aplicación web, el mismo usuario puede abrir más conexiones en la base de datos.Quiero el número de conexiones abiertas en la base de datos usando mi aplicación web y es asp.net. –

Respuesta

1

Es posible que desee leer en la agrupación de conexiones: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

se crea un grupo de conexión independiente para cada cadena de conexión distinta. Además, si se está conectando a través de una seguridad integrada y su sitio web usa autenticación básica o de Windows (en lugar de anónimo), se creará un grupo de conexiones por separado para cada usuario del sitio web.

Para borrar las agrupaciones de conexiones, el objeto SqlConnection proporciona los métodos ClearPool() y ClearAllPool() `. Sin embargo, una conexión individual no se cerrará y se eliminará del grupo hasta que se cierre o elimine.

Todos los diversos objetos implicados en la ejecución de la consulta sql que implementan IDisposable se deben envolver en una declaración using para su eliminación garantizada. Algo a lo largo de estas líneas:

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 ; 

Puede examinar lo SPID están abiertas en SQL Server, ya sea mediante la ejecución del procedimiento almacenado sp_who (debe tener los permisos de administración adecuados en el servidor SQL Server). También puedes usar perfmon.

+0

hola Nicholas, gracias por la respuesta. Sí, utilicé las instrucciones para conexión, comando y también conexiones cerradas y eliminadas en el bloque finally, también permití el tamaño mínimo del grupo como 0 y el tamaño máximo del grupo como 10, pero aún hay más de 200 conexiones abiertas en la base de datos se están quejando de esto. ¿Puede decirme qué sucederá si utilizo SqlConnection.ClearAllPool() y dónde se usará esto? –

8

Esto muestra el número de conexiones por cada DB:

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

y esto da el total de conexiones:

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

desde C#, puede seguir:
http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx Otra buena referencia puede haber encontrado en:
http://www.wduffy.co.uk/blog/monitoring-database-connections/

llamada al método estático ReleaseObjectPool en el la OleDbConnection - ver http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.releaseobjectpool.aspx

+0

Hola Nitin, gracias por responder, pero SELECCIONAR COUNT (dbid) como TotalConnections FROM sys.sysprocesses WHERE dbid> 0 devuelve uno pero hay 25 conexiones abiertas en la base de datos. SELECT DB_NAME (dbid) como DBName, COUNT (dbid) como NoOfConnections, loginame como LoginName DE sys.sysprocesses DONDE dbida> 0 GROUP BY dbida, loginame y esto también da conexiones abiertas como 1 –

+0

hice editar al final de mi solución, por favor intente también –

+1

@RD Intenta iniciar sesión como SysAdmin – Zsmaster

2

consulta SQL para obtener la corriente de conexión activa

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

puede definir dbida si quieres conexión específica a la base de datos

Cuestiones relacionadas