Pregunta

Mi aplicación PHP / MS Sql Server 2005 / win 2003 ocasionalmente deja de responder, el uso de la memoria / CPU no aumenta. Si trato de abrir una nueva conexión desde el estudio de administración de 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

¿Fue útil?

Solución

Esto muestra el número 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 el rol de "administrador del sistema" (de lo contrario, solo mostrará una fila individual y un recuento de 1 como resultado)

Otros consejos

Como se mencionó en @jwalkerjr, debe desechar las conexiones en el código (si la agrupación de conexiones está habilitada, solo se devuelven a la agrupación de conexiones). La forma prescrita de hacer esto es usar la declaración ' 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 antiguo, pero pensé que sería una buena idea actualizar. Si se necesita un recuento preciso, la columna ECID probablemente también debería filtrarse. Un SPID con subprocesos paralelos puede aparecer varias veces en sysprocesses y el filtrado de 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 para cada grupo de conexiones (asumiendo que cada proceso de usuario / host usa 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 puede saber, tiene un problema con el código de la base de datos de su aplicación. Debería estar liberando / desechando esas conexiones después del uso y utilizando la agrupación de conexiones. Echa un vistazo aquí para ver un artículo decente sobre el tema ...

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

vea sp_who que le brinda más detalles que solo ver el número de conexiones

En tu caso, yo 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'

Basado en el conocimiento de MS SQL: cómo saber si hay conexiones de base de datos SQL abiertas y en qué host están ocupados.

Usando la siguiente consulta, encontrará la base de datos de la lista, el nombre del host y el número total de conexiones abiertas, según la idea que tenga, 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top