406 Stimmen

Wie kann ich aktive SQL Server-Verbindungen sehen?

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

Gibt es Befehle, die dieses Problem lösen?

460voto

Syed Umar Ahmed Punkte 5202
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 für sys.syProzesse .

437voto

mmx Punkte 400975

Sie können die sp_who gespeicherte Prozedur.

Liefert Informationen über aktuelle Benutzer, Sitzungen und Prozesse in einer Instanz der Microsoft SQL Server-Datenbank-Engine. Die Informationen können gefiltert werden, um nur die Prozesse anzuzeigen, die nicht im Leerlauf sind, die zu einem bestimmten Benutzer oder einer bestimmten Sitzung gehören.

67voto

Sklivvz Punkte 29602

Abgesehen von sp_who können Sie auch die "undokumentierte" sp_who2 System Stored Procedure, die Ihnen genauere Informationen liefert. Siehe _Unterschied zwischen sp_who und sp_who2_ .

62voto

Fernando Santos Punkte 559

Klicken Sie auf das Symbol "Aktivitätsmonitor" in der Symbolleiste.

En Thorsten 's Kommentar :

Klicken Sie in SQL Server Management Studio mit der rechten Maustaste auf den Server und wählen Sie "Activity Monitor" aus dem Kontextmenü - oder verwenden Sie die Tastenkombination Ctrl + Alt + A .

Referenz: Microsoft Docs - Aktivitätsmonitor in SQL Server Management Studio (SSMS) öffnen

51voto

Marcello Miorelli Punkte 2983

Nachfolgend finden Sie mein Skript, mit dem Sie alle mit einer Datenbank verbundenen Sitzungen finden und überprüfen können, ob diese Sitzungen E/A durchführen und ob es eine Option gibt, sie zu beenden.

Das Skript zeigt auch den Status der einzelnen Sitzungen an.

Sehen Sie sich das unten an.

--==============================================================================
-- 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

--==============================================================================

UPDATE 20. Januar 2022

Ich habe jetzt eine bessere Version, die Folgendes verwendet sys.dm_tran_locks Dies ist besonders nützlich, wenn Sie alle Benutzer aus einer bestimmten Datenbank benötigen, und deshalb habe ich diesen Parameter @dbname

Selbst wenn jemand nur SSMS öffnet und eine Verbindung zu einer Datenbank herstellt, wird sie in dieser Abfrage angezeigt.

DECLARE @dbname SYSNAME =NULL

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

       ,DatabaseName = COALESCE( db_name(sdes.database_id),  N'')
       ,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_tran_locks t
INNER JOIN sys.dm_exec_sessions sdes
        ON T.request_session_id = sdes.session_id

LEFT OUTER JOIN sys.dm_exec_connections AS sdec 
        ON sdec.session_id = sdes.session_id

OUTER 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 t.resource_type = 'database' 
  and t.resource_database_id = CASE WHEN @dbname IS NULL 
                                    THEN t.resource_database_id  
                                    ELSE DB_ID(@dbname)  
                               END 
  and t.request_type = 'LOCK' 
  and t.request_status = 'GRANT'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X