Question

Mon application PHP / MS Sql Server 2005 / win 2003 devient parfois très instable, l’utilisation de la mémoire / du cpu 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

Était-ce utile?

La solution

Ceci indique le nombre de connexions par 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)

Autres conseils

Comme @jwalkerjr l'a mentionné, vous devez supprimer les connexions en code (si le regroupement de connexions est activé, elles sont simplement renvoyées au pool de connexions). Pour ce faire, vous devez utiliser l'instruction ' à l'aide de ':

// 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);
            }
        }
    }
}

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

Utilisez-le pour obtenir un décompte précis pour chaque pool de connexions (en supposant que chaque processus utilisateur / 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

Si votre application PHP maintient ouverte de nombreuses connexions SQL Server, alors, comme vous le savez peut-être, vous rencontrez 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. Regardez ici pour un article décent sur le sujet ...

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

voir sp_who , il vous fournit davantage de détails que le simple affichage du numéro. des connexions

dans votre cas, je voudrais faire 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'

Basé sur les connaissances MS SQL - Comment connaître les connexions de base de données SQL ouvertes et occupé sur quel hôte.

En utilisant la requête ci-dessous, vous trouverez la base de données de liste, le nom d’hôte et le nombre total de connexions ouvertes, en fonction de votre choix, de 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top