sp_who(Transact-SQL)
Microsoft SQL Server 데이터베이스 엔진 인스턴스의 현재 사용자, 세션 및 프로세스에 대한 정보를 제공합니다. 유휴 상태가 아닌 프로세스, 특정 사용자에게 속한 프로세스 또는 특정 세션에 속하는 프로세스만 반환하도록 이 정보를 필터링할 수 있습니다.
구문
sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]
인수
[ @loginame = ] 'login' | session ID | 'ACTIVE'
결과 세트를 필터링하는 데 사용됩니다.login은 특정 로그인에 속하는 프로세스를 식별하는 sysname입니다.
session ID(SQL Server 2000 및 이전 버전에서는 SPID)는 SQL Server 인스턴스에 속하는 세션 ID입니다. session ID는 smallint입니다.
ACTIVE를 지정하면 사용자로부터 다음 명령을 기다리고 있는 세션은 제외됩니다.
값을 지정하지 않으면 인스턴스에 속하는 모든 세션이 보고됩니다.
반환 코드 값
0(성공) 또는 1(실패)
결과 집합
sp_who는 다음 정보가 포함된 결과 집합을 반환합니다.
열 |
데이터 형식 |
설명 |
---|---|---|
spid |
smallint |
세션 ID입니다. |
ecid |
smallint |
특정 세션 ID와 연결된 지정된 스레드의 실행 컨텍스트 ID입니다. ECID = {0, 1, 2, 3, ...n}이며 여기서 0은 항상 주 또는 부모 스레드를 의미하고 {1, 2, 3, ...n}은 하위 스레드를 의미합니다. |
status |
nchar(30) |
프로세스 상태입니다. 가능한 값은 아래와 같습니다. dormant. SQL Server에서 세션을 다시 설정하고 있습니다. running. 세션에서 일괄 처리를 하나 이상 실행하고 있습니다. MARS(Multiple Active Result Sets)를 설정하면 세션에서 여러 개의 일괄 처리를 실행할 수 있습니다. 자세한 내용은 MARS(Multiple Active Result Sets) 사용을 참조하십시오. background. 세션에서 교착 상태 감지와 같은 백그라운드 태스크를 실행하고 있습니다. rollback. 세션에서 트랜잭션 롤백을 진행하고 있습니다. pending. 세션이 작업 스레드를 사용할 수 있을 때까지 기다리고 있습니다. runnable. 세션의 태스크는 시간 퀀텀을 얻기 위해 기다리는 동안 스케줄러의 실행 가능한 큐에 있습니다. spinloop. 세션의 태스크가 spinlock을 사용할 수 있을 때까지 기다리고 있습니다. suspended. 세션이 I/O와 같은 이벤트가 완료되기를 기다리고 있습니다. |
loginame |
nchar(128) |
특정 프로세스와 연결된 로그인 이름입니다. |
hostname |
nchar(128) |
각 프로세스의 호스트 또는 컴퓨터 이름입니다. |
blk |
char(5) |
프로세스를 차단하기 위한 세션 ID입니다(존재하는 경우). 없는 경우 이 열은 0이 됩니다. 분리된 분산 트랜잭션이 지정된 세션 ID와 연결된 트랜잭션을 차단하는 경우 이 열은 분리된 트랜잭션을 차단하기 위한 값으로 '-2'를 반환합니다. |
dbname |
nchar(128) |
프로세스가 사용하는 데이터베이스입니다. |
cmd |
nchar(16) |
프로세스에 대해 실행 중인 데이터베이스 엔진 명령(Transact-SQL 문, 내부 데이터베이스 엔진 프로세스 등)입니다. |
request_id |
int |
특정 세션에서 실행 중인 요청에 대한 ID입니다. |
병렬 처리의 경우 특정 세션 ID에 대해 하위 스레드가 생성됩니다. 주 스레드는 spid = <xxx> 및 ecid =0으로 표시됩니다. 다른 하위 스레드의 경우 spid = <xxx>는 동일하지만 ecid > 0이 다릅니다.
주의
차단 프로세스(배타 잠금이 설정된 경우도 있음)는 다른 프로세스에 필요한 리소스를 보유하고 있는 프로세스입니다.
SQL Server 2000 및 이후 버전에서 모든 분리된 분산 트랜잭션에는 세션 ID 값 '-2'가 할당됩니다. 분리된 분산 트랜잭션은 어떤 세션 ID와도 연결되지 않은 분산 트랜잭션입니다. 자세한 내용은 표시된 트랜잭션 사용(전체 복구 모델)을 참조하십시오.
SQL Server 2000 및 이상 버전에서는 내부적으로 사용하기 위해 1부터 50까지의 세션 값이 예약되어 있습니다. 51 이상의 세션 ID 값은 사용자 세션을 의미합니다.
사용 권한
SQL Server 인스턴스에서 실행되는 모든 세션을 볼 수 있으려면 해당 서버에 대한 VIEW SERVER STATE 권한이 필요합니다. 그렇지 않으면 현재 세션만 사용자에게 표시됩니다.
예
1. 현재 프로세스 모두 나열
다음 예에서는 매개 변수 없이 sp_who를 사용하여 현재 사용자를 모두 보고합니다.
USE master;
GO
EXEC sp_who;
GO
2. 특정 사용자의 프로세스 나열
다음 예에서는 로그인 이름으로 한 명의 현재 사용자에 대한 정보를 보는 방법을 보여 줍니다.
USE master;
GO
EXEC sp_who 'janetl';
GO
3. 활성 프로세스 모두 표시
USE master;
GO
EXEC sp_who 'active';
GO
4. 세션 ID를 지정하여 특정 프로세스 표시
USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO