Wie zu bestimmen, Gesamtzahl der offenen/aktiven verbindungen in ms sql server 2005
-
03-07-2019 - |
Frage
Meine PHP/MS-Sql-Server 2005/win 2003 Anwendung gelegentlich nicht mehr reagiert, wird sehr, den Speicher/die cpu-Auslastung nicht spike.Wenn ich versuche, öffnen Sie eine neue Verbindung von sql management studio ein, dann hängt es sich einfach an der geöffneten Dialogfeld "Verbindung".wie deterime die Gesamtzahl der aktiven verbindungen, ms sql server 2005
Lösung
Dies zeigt die Anzahl der Verbindungen pro jede DB:
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
Und das gibt die Gesamt:
SELECT
COUNT(dbid) as TotalConnections
FROM
sys.sysprocesses
WHERE
dbid > 0
Wenn Sie mehr Details benötigen, führen Sie:
sp_who2 'Active'
Hinweis: Das SQL Server verwendete Konto muss die sysadmin Rolle (sonst wird es nur eine einzige Reihe zeigen und eine Zählung von 1 als Ergebnis)
Andere Tipps
Wie @jwalkerjr erwähnt, sollten Sie von Verbindungen im Code werden Entsorgung (wenn Verbindungspooling aktiviert ist, werden sie nur an den Verbindungspool zurückgegeben). Die vorgeschriebene Art und Weise, dies zu tun ist mit der ‚using
‘ Aussage:
// 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);
}
}
}
}
Ich weiß, das ist alt, aber dachte, es wäre eine gute Idee, zu aktualisieren. Wenn eine genaue Zählung benötigt wird, dann sollte Spalte ECID wahrscheinlich auch gefiltert werden. Ein SPID mit parallelen Fäden kann mehrfach in sysprocesses und Filterung ECID = 0 kehren den primären Thread für jeden SPID angezeigt.
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
Verwenden Sie diese Funktion eine genaue Zählung für jede Verbindung Pool zu bekommen (vorausgesetzt, jeder Benutzer / Host-Prozess die gleiche Verbindungszeichenfolge verwendet)
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
Wenn Sie Ihre PHP-Anwendung wird geöffnet viele SQL Server-Verbindungen zu halten, dann, wie Sie vielleicht wissen, haben Sie ein Problem mit Ihrem App-Datenbank-Code. Es sollte die Freigabe / diese Verbindungen nach Gebrauch entsorgen und Connection Pooling verwenden. Werfen Sie einen Blick hier für einen anständigen Artikel zum Thema ...
http://www.c-sharpcorner.com/UploadFile /dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx
finden Sie unter Sp_who es gibt Ihnen mehr Details als nur die Zahl zu sehen von Verbindungen
in Ihrem Fall ich so etwas tun würde
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'
MS SQL-Kenntnisse verfügen, basiert - Wie Sie wissen, öffnen Sie den SQL-Datenbank-Verbindung(en) und besetzt, auf dem host.
Mithilfe der folgenden Abfrage werden Sie finden, Liste, Datenbank, Host-Namen und die Gesamt-Anzahl der Anzahl der geöffneten verbindungen, basierend auf, dass, werden Sie haben die Idee, die der host besetzt ist SQL-Verbindung.
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