it-swarm.com.de

Wie sehe ich aktive SQL Server-Verbindungen?

Ich verwende SQL Server 2008 Enterprise. Ich möchte alle aktiven SQL Server-Verbindungen und die zugehörigen Informationen zu allen Verbindungen anzeigen, z. B. von welcher IP-Adresse aus, Verbindung zu welcher Datenbank herstellen oder so.

Gibt es bereits Befehle, um dieses Problem zu lösen?

261
George2

Sie können die gespeicherte Prozedur sp_who verwenden.

Enthält Informationen zu aktuellen Benutzern, Sitzungen und Prozessen in einer Instanz des Microsoft SQL Server-Datenbankmoduls. Die Informationen können gefiltert werden, um nur diejenigen Prozesse zurückzugeben, die nicht inaktiv sind, die einem bestimmten Benutzer oder einer bestimmten Sitzung gehören.

322
Mehrdad Afshari
SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame
;

Siehe auch die Microsoft-Dokumentation zu sys.sysprocesses .

307
Syed Umar Ahmed

Abgesehen von sp_who können Sie auch die gespeicherte Prozedur "undokumentiert" sp_who2 verwenden, mit der Sie detailliertere Informationen erhalten. Siehe nterschied zwischen sp_who und sp_who2.

50
Sklivvz

Klicken Sie in der Symbolleiste auf das Symbol "Aktivitätsüberwachung" ...

Aus Thorstens Kommentaren:

Klicken Sie in SQL Server Management Studio mit der rechten Maustaste auf Server, und wählen Sie im Kontextmenü die Option "Aktivitätsmonitor" aus, oder verwenden Sie die Tastenkombination Ctrl + Alt + A.

40
Fernando Santos

Im Folgenden ist mein Skript aufgeführt, mit dem alle mit einer Datenbank verbundenen Sitzungen ermittelt werden. Sie können überprüfen, ob diese Sitzungen E/A-Vorgänge ausführen, und sie können optional beendet werden.

Das Skript zeigt auch den Status jeder Sitzung an.

Schauen Sie unten nach.

--==============================================================================
-- See who is connected to the database.
-- Analyse what each spid is doing, reads and writes.
-- If safe you can copy and paste the killcommand - last column.
-- Marcelo Miorelli
-- 18-july-2017 - London (UK)
-- Tested on SQL Server 2016.
--==============================================================================
USE master
go
SELECT
     sdes.session_id
    ,sdes.login_time
    ,sdes.last_request_start_time
    ,sdes.last_request_end_time
    ,sdes.is_user_process
    ,sdes.Host_name
    ,sdes.program_name
    ,sdes.login_name
    ,sdes.status

    ,sdec.num_reads
    ,sdec.num_writes
    ,sdec.last_read
    ,sdec.last_write
    ,sdes.reads
    ,sdes.logical_reads
    ,sdes.writes

    ,sdest.DatabaseName
    ,sdest.ObjName
    ,sdes.client_interface_name
    ,sdes.nt_domain
    ,sdes.nt_user_name
    ,sdec.client_net_address
    ,sdec.local_net_address
    ,sdest.Query
    ,KillCommand  = 'Kill '+ CAST(sdes.session_id  AS VARCHAR)
FROM sys.dm_exec_sessions AS sdes

INNER JOIN sys.dm_exec_connections AS sdec
        ON sdec.session_id = sdes.session_id

CROSS APPLY (

    SELECT DB_NAME(dbid) AS DatabaseName
        ,OBJECT_NAME(objectid) AS ObjName
        ,COALESCE((
            SELECT TEXT AS [processing-instruction(definition)]
            FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)
            FOR XML PATH('')
                ,TYPE
            ), '') AS Query

    FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)

) sdest
WHERE sdes.session_id <> @@SPID
  AND sdest.DatabaseName ='yourdatabasename'
--ORDER BY sdes.last_request_start_time DESC

--==============================================================================
20

Ich habe dies zusammengefasst, damit Sie die Ergebnisse abfragen können

Declare @dbName varchar(150)
set @dbName = '[YOURDATABASENAME]'

--Total machine connections
--SELECT  COUNT(dbid) as TotalConnections FROM sys.sysprocesses WHERE dbid > 0

--Available connections
DECLARE @SPWHO1 TABLE (DBName VARCHAR(1000) NULL, NoOfAvailableConnections VARCHAR(1000) NULL, LoginName VARCHAR(1000) NULL)
INSERT INTO @SPWHO1 
    SELECT db_name(dbid), count(dbid), loginame FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid, loginame
SELECT * FROM @SPWHO1 WHERE DBName = @dbName

--Running connections
DECLARE @SPWHO2 TABLE (SPID VARCHAR(1000), [Status] VARCHAR(1000) NULL, [Login] VARCHAR(1000) NULL, HostName VARCHAR(1000) NULL, BlkBy VARCHAR(1000) NULL, DBName VARCHAR(1000) NULL, Command VARCHAR(1000) NULL, CPUTime VARCHAR(1000) NULL, DiskIO VARCHAR(1000) NULL, LastBatch VARCHAR(1000) NULL, ProgramName VARCHAR(1000) NULL, SPID2 VARCHAR(1000) NULL, Request VARCHAR(1000) NULL)
INSERT INTO @SPWHO2 
    EXEC sp_who2 'Active'
SELECT * FROM @SPWHO2 WHERE DBName = @dbName
12
Don Rolling

Die Abfrage von MS, in der die Verwendung des Befehls " kill " erläutert wird, ist recht nützlich, wenn Verbindungsinformationen bereitgestellt werden:

SELECT conn.session_id, Host_name, program_name,
    nt_domain, login_name, connect_time, last_request_end_time 
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
   ON sess.session_id = conn.session_id;

HTH, Grüße,

2
Zalakain