procesos - Cómo determinar el número total de conexiones abiertas/activas en ms sql server 2005
sql server view connections (7)
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
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 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);
}
}
}
}
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)
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
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
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
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