it-swarm.com.de

So ermitteln Sie die Gesamtzahl der offenen/aktiven Verbindungen in ms sql server 2005

Meine Anwendung für PHP/MS SQL Server 2005/win 2003 reagiert gelegentlich nicht mehr, die Speicher-/CPU-Auslastung wird nicht erhöht. Wenn ich versuche, eine neue Verbindung aus dem SQL Management Studio zu öffnen, hängt sie nur im geöffneten Verbindungsdialogfeld. Wie lässt sich die Gesamtzahl der aktiven Verbindungen bestimmen? ms sql server 2005

84
jagan

Dies zeigt die Anzahl der Verbindungen pro 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 ergibt die Summe:

SELECT 
    COUNT(dbid) as TotalConnections
FROM
    sys.sysprocesses
WHERE 
    dbid > 0

Wenn Sie mehr Details benötigen, führen Sie Folgendes aus:

sp_who2 'Active'

Hinweis: Das verwendete SQL Server-Konto benötigt die Rolle 'sysadmin' (andernfalls wird nur eine einzelne Zeile angezeigt und als Ergebnis 1).

237
Mitch Wheat

Wie @jwalkerjr bereits erwähnt hat, sollten Sie Verbindungen im Code bereitstellen (wenn das Verbindungspooling aktiviert ist, werden sie nur in den Verbindungspool zurückgegeben). Der vorgeschriebene Weg dazu ist die Anweisung '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);
            }
        }
    }
}
7
Mitch Wheat

Verwenden Sie dies, um eine genaue Zählung für jeden Verbindungspool zu erhalten (vorausgesetzt, jeder Benutzer/Host-Prozess verwendet dieselbe Verbindungszeichenfolge)

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
4
realstrategos

Ich weiß, das ist alt, aber ich dachte, es wäre eine gute Idee, ein Update durchzuführen. Wenn eine genaue Zählung erforderlich ist, sollte wahrscheinlich auch die Spalte ECID gefiltert werden. Eine SPID mit parallelen Threads kann in sysprocesses mehrmals angezeigt werden. Durch das Filtern von ECID = 0 wird der primäre Thread für jede SPID zurückgegeben.

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
3
sqldba.today

Wenn Ihre PHP -App viele SQL Server-Verbindungen offen hält, haben Sie, wie Sie vielleicht wissen, ein Problem mit dem Datenbankcode Ihrer App. Es sollte diese Verbindungen nach Gebrauch freigeben/entsorgen und das Verbindungs-Pooling verwenden. Schauen Sie sich hier einen anständigen Artikel zum Thema an ...

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

1
jwalkerjr

MS SQL wissensbasiert - Wie man offene SQL-Datenbankverbindung (en) kennt und auf welchem ​​Host belegt ist.

Mit Hilfe der folgenden Abfrage finden Sie eine Listendatenbank, einen Hostnamen und die Gesamtzahl der offenen Verbindungsanzahl. Darauf basierend können Sie eine Ahnung haben, welcher Host die SQL-Verbindung belegt hat. 

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
0
Tarun Harkinia

siehe sp_who Sie erhalten mehr Details als nur die Anzahl der Verbindungen zu sehen 

in deinem Fall würde ich so etwas tun 

 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'
0
Mina Gabriel