[sql] 활성 SQL Server 연결을 보려면 어떻게합니까?

SQL Server 2008 Enterprise를 사용하고 있습니다. 모든 활성 SQL Server 연결과 IP 주소, 데이터베이스 또는 연결 대상과 같은 모든 연결의 관련 정보를보고 싶습니다.

이 문제를 해결하기위한 기존 명령이 있습니까?



답변

sp_who저장 프로 시저를 사용할 수 있습니다 .

Microsoft SQL Server 데이터베이스 엔진 인스턴스에서 현재 사용자, 세션 및 프로세스에 대한 정보를 제공합니다. 유휴 상태가 아니거나 특정 사용자에게 속하거나 특정 세션에 속하는 프로세스 만 반환하도록 정보를 필터링 할 수 있습니다.


답변

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

sys.sysprocesses에 대한 Microsoft 설명서도 참조하십시오 .


답변

이외에도 보다 자세한 정보를 제공 sp_who하는 “언급되지 않은” sp_who2시스템 저장 프로 시저를 사용할 수도 있습니다 . sp_who와 sp_who2의 차이점을 참조하십시오 .


답변

툴바에서 “활동 모니터”아이콘을 클릭하십시오 …

Thorsten의 의견에서 :

SQL Server Management Studio에서 서버를 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 “활동 모니터”를 선택하거나 키보드 단축키 Ctrl+ Alt+를 사용하십시오 A.


답변

아래는 데이터베이스에 연결된 모든 세션을 찾는 스크립트이며 해당 세션에서 I / O를 수행하고 있으며 종료하는 옵션이 있는지 확인할 수 있습니다.

스크립트는 각 세션의 상태도 보여줍니다.

아래를보세요.

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

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


답변

결과를 쿼리 할 수 ​​있도록 이것을 함께 던졌습니다.

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


답변

KILL명령 사용을 설명하는 MS의 쿼리 는 연결 정보를 제공하는 데 매우 유용합니다.

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;