Cómo determinar el número total de conexiones abiertas / activas en ms sql server 2005

Mi PHP / MS Sql Server 2005 / win 2003 ocasionalmente deja de responder, el uso de memoria / CPU no aumenta. Si trato de abrir cualquier conexión nueva desde el estudio de administración SQL, entonces simplemente se cuelga en el cuadro de diálogo de conexión abierta. cómo determinar el número total de conexiones activas ms sql server 2005

Esto muestra la cantidad de conexiones por cada DB:

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

Y esto da el total:

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

Si necesita más detalles, ejecute:

 sp_who2 'Active' 

Nota: La cuenta de SQL Server utilizada necesita la función ‘sysadmin’ (de lo contrario, solo mostrará una única fila y un recuento de 1 como resultado)

Como se mencionó en @jwalkerjr, debería deshacerse de las conexiones en el código (si la agrupación de conexiones está habilitada, simplemente se devuelven al grupo de conexiones). La forma prescrita para hacer esto es usar la statement ‘ 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); } } } } 

Sé que esto es viejo, pero pensé que sería una buena idea actualizar. Si se necesita un recuento exacto, entonces la columna ECID probablemente también se debe filtrar. Un SPID con subprocesos paralelos puede aparecer varias veces en sysprocesses y el filtrado ECID = 0 devolverá el subproceso primario para cada 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 

Use esto para obtener un recuento preciso de cada grupo de conexiones (suponiendo que cada proceso de usuario / host utiliza la misma cadena de conexión)

 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 

Si su aplicación PHP mantiene abiertas muchas conexiones de SQL Server, entonces, como sabrá, tiene un problema con el código de la base de datos de su aplicación. Debería liberar / eliminar esas conexiones después del uso y usar la agrupación de conexiones. Mire aquí un artículo decente sobre el tema …

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

ver sp_who le da más detalles que solo ver la cantidad de conexiones

en tu caso, haría algo como esto

  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' 

Conocimientos basados ​​en MS SQL – Cómo saber las conexiones de bases de datos SQL abiertas y ocupadas en qué host.

Usando la consulta a continuación encontrará la base de datos de la lista, el nombre de host y el número total de conteo de conexiones abiertas, en base a eso tendrá una idea de qué host ha ocupado la conexión 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 
    Intereting Posts