Mon application PHP/MS Sql Server 2005/win 2003 devient parfois très instable, l'utilisation de la mémoire/du processeur ne augmente pas. Si j'essaie d'ouvrir une nouvelle connexion à partir de SQL Management Studio, alors il se bloque dans la boîte de dialogue de connexion ouverte. comment déterminer le nombre total de connexions actives ms sql server 2005
Ceci montre le nombre de connexions par chaque DB:
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
Et cela donne le total:
SELECT
COUNT(dbid) as TotalConnections
FROM
sys.sysprocesses
WHERE
dbid > 0
Si vous avez besoin de plus de détails, lancez:
sp_who2 'Active'
Remarque: Le compte SQL Server utilisé a besoin du rôle 'sysadmin' (sinon, il affichera une seule ligne et un nombre égal à 1).
Comme @jwalkerjr l'a mentionné, vous devriez éliminer les connexions en code (si le regroupement de connexions est activé, elles sont simplement renvoyées au pool de connexions). La façon prescrite de faire ceci est d'utiliser l'instruction '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);
}
}
}
}
Utilisez-le pour obtenir un nombre précis pour chaque pool de connexions (en supposant que chaque utilisateur/processus hôte utilise la même chaîne de connexion)
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
Je sais que c'est vieux, mais j'ai pensé que ce serait une bonne idée de mettre à jour. Si un comptage précis est nécessaire, alors la colonne ECID devrait probablement aussi être filtrée. Un SPID avec des threads parallèles peut apparaître plusieurs fois dans sysprocesses et le filtrage ECID = 0 renvoie le thread principal pour chaque 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 votre application PHP maintient ouverte de nombreuses connexions SQL Server, vous avez probablement un problème avec le code de la base de données de votre application. Il devrait libérer/éliminer ces connexions après utilisation et utiliser le regroupement de connexions. Jetez un oeil ici pour un article décent sur le sujet ...
http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx
Connaissances basées sur MS SQL - Comment savoir ouvrir une ou plusieurs connexions de base de données SQL et occuper quel hôte.
En utilisant la requête ci-dessous, vous trouverez la base de données de la liste, le nom d’hôte et le nombre total de connexions ouvertes, en fonction de votre choix, l’hôte ayant occupé la connexion 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
voir sp_who il vous donne plus de détails que juste voir le nombre de connexions
dans votre cas, je ferais quelque chose comme ça
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'