본문 바로가기

Database/MSSQL

MSSQL 데이터베이스 접속자 및 연결 정보 확인하는 방법

 

MSSQL 데이터베이스 접속자 및 연결 정보 확인하는 방법

 

우리가 MSSQL을 사용하다보면 데이터베이스에 현재 몇명이 접속해있고, 누가 접속해 있는지, 또는 어떤 IP로 접속했는지 확인이 필요할 때가 있다.
이럴 때 간단하게 확인해 볼 수 있는 방법에 대해 알아보자.

 

현재 데이터베이스에 접속중인 접속자 수 확인하는 방법

 

SELECT DB_NAME(dbid) as DB이름, COUNT(dbid) as 접속자수
FROM sys.sysprocesses
WHERE dbid > 0
GROUP BY dbid

 

쿼리를 실행하면, 현재 접속중인 접속자 수를 데이터베이스별로 알려준다.

 

현재 데이터베이스에 접속중인 연결 정보 확인하는 방법

SELECT S.spid, S.loginame, S.login_time, S.last_batch, C.client_net_address
FROM sys.sysprocesses S, sys.dm_exec_connections C
WHERE S.spid = C.session_id

 

위와 같이 쿼리를 실행하면 데이터베이스에 접속중인 접속자의 연결 정보를 확인할 수 있다.
접속한 사람의 SPID(세션 아이디), 로그인이름, 로그인한 시간, 마지막으로 실행한 시간, 로그인 IP등을 확인할 수 있다.

 

​* sys.sysprocesses : SQL Server 인스턴스에서 실행 중인 프로세스에 대한 정보를 표시하는 뷰

 

 - sys.sysprocesses 컬럼

 

spid : SQL Server 세션 아이디
loginame : 로그인 이름
login_time : 서버에 로그인한 시간
last_batch : 원격 저장 프로시저 호출 또는 EXECUTE 문을 마지막으로 실행한 시간
status : 프로세스 아이디 상태
program_name : 응용 프로그램의 이름
cmd : 현재 실행 중인 명령

status가
running : 세션에서 일괄 처리를 하나 이상 실행하는 상태
background : 세션에서 백그라운드 태스크를 실행하는 상태
rollback : 세션에서 트랜잭션 롤백을 진행하는 상태
pending : 세션이 작업자 스레드를 사용할 수 있을 때까지 기다리는 상태
runnable : 세션이 실행중인 상태
sleeping : 세션이 작업을 기다리고 있는 상태
spinloop : 세션이 스핀락에 걸려 있는 상태
suspended : 세션이 이벤트가 발생할 때까지 대기하고 있는 상태를 의미한다.

 

* sys.dm_exec_connections : SQL Server 인스턴스에 대해 설정된 연결에 대한 정보와 각 연결에 대한 세부 정보를 표시하는 뷰

 

 - sys.dm_exec_connections 컬럼

 

session_id : SQL Server 세션 아이디
client_net_address : MSSQL 서버에 연결된 클라이언트의 호스트 주소 IP

 

* 현재 데이터베이스에 접속중인 연결 정보를 확인하기 위해 sys.sysprocesses와 sys.dm_exec_connections를 조인하는 이유는 sys.sysprocesses는 SQL Server 실행 중인 프로세스에 대한 정보를 표시하기 때문에 현재 접속중인 세션정보를 확인하기 위해서는 반듯이 필요하나 클라이언트 프로세스와 시스템 프로세스 모두를 포함하고 있다.
따라서 클라이언트 프로세스만을 갖고 있는 sys.dm_exec_connections를 조인하여 클라이언트 프로세스의 접속정보를 표시할 수 있도록 만들어 주어야 한다.