IT-Swarm.Net

Cum văd conexiunile SQL Server active?

Folosesc SQL Server 2008 Enterprise. Vreau să văd orice conexiuni SQL Server active, precum și informațiile aferente tuturor conexiunilor, cum ar fi de la care adresa IP se conectează la baza de date sau ceva de genul.

Există comenzi existente pentru a rezolva această problemă?

255
George2

Puteți utiliza procedura sp_who stocată.

Oferă informații despre utilizatorii, sesiunile și procesele actuale într-o instanță a motorului de baze de date Microsoft SQL Server. Informațiile pot fi filtrate pentru a returna doar acele procese care nu sunt inactive, care aparțin unui utilizator specific sau care aparțin unei sesiuni specifice.

311
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
;

Consultați și documentația Microsoft pentru sys.sysprocesses .

299
Syed Umar Ahmed

În afară de sp_who, puteți utiliza, de asemenea, procedura de stocare a sistemului "nedocumentat" sp_who2 care vă oferă informații mai detaliate. A se vedea Diferența dintre sp_who și sp_who2.

47
Sklivvz

Faceți clic pe pictograma „monitorizarea activității” din bara de instrumente ...

Din comentariile lui Thorsten:

În SQL Server Management Studio, faceți clic dreapta pe Server, alegeți „Monitor de activitate” din meniul contextual - sau folosiți comanda rapidă de la tastatură Ctrl + Alt + A.

38
Fernando Santos

Mai jos este scriptul meu pentru a găsi toate sesiunile conectate la o bază de date și puteți verifica dacă acele sesiuni efectuează vreun I/O și există o opțiune pentru a le ucide.

Scriptul arată, de asemenea, starea fiecărei sesiuni.

Aruncați o privire mai jos.

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

--==============================================================================
19
marcello miorelli

Am aruncat asta împreună, astfel încât să puteți face întrebări cu privire la rezultate

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

Interogarea MS care explică utilizarea comenzii " kill " este destul de utilă furnizând informațiile conexiunii:

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, respect,

0
Zalakain