sp_who(Transact-SQL)

적용 대상:SQL Server

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

Transact-SQL 구문 표기 규칙

구문

sp_who [ [ @loginame = ] { 'login' | *session_id* | 'ACTIVE' } ]
[ ; ]

인수

[ @loginame = ] { 'login' | session_id | 'ACTIVE' }

결과 집합을 필터링하는 데 사용됩니다.

  • login특정 로그인에 속하는 프로세스를 식별하는 sysname 입니다.

  • session_id SQL Server 인스턴스에 속하는 세션 ID 번호입니다. session_id 작습니다.

  • 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(다중 활성 결과 집합)를 사용하도록 설정하면 세션이 여러 일괄 처리를 실행할 수 있습니다. 자세한 내용은 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와 연결된 트랜잭션이 분리된 분산 트랜잭션에 의해 차단되면 이 열은 분리된 차단 트랜잭션에 대한 a -2 를 반환합니다.
dbname nchar(128) 프로세스에서 사용하는 데이터베이스입니다.
cmd nchar(16) 프로세스에 대해 실행되는 데이터베이스 엔진 명령(Transact-SQL 문, 내부 데이터베이스 엔진 프로세스 등) SQL Server 2019(15.x) 이상 버전에서는 데이터 형식이 nchar(26)입니다.
request_id int 특정 세션에서 실행되는 요청에 대한 ID입니다.

병렬 처리를 사용하면 특정 세션 ID에 대한 하위 스레드가 만들어집니다. 주 스레드는 spid = <xxx>ecid = 0으로 표시됩니다. 다른 하위 스레드는 동일 spid = <xxx>하지만 ecid > 0.

설명

단독 잠금이 있을 수 있는 차단 프로세스는 다른 프로세스에 필요한 리소스를 보유하는 프로세스입니다.

분리된 모든 분산 트랜잭션에는 의 세션 ID 값 -2이 할당됩니다. 분리된 분산 트랜잭션은 세션 ID와 연결되지 않은 분산 트랜잭션입니다. 자세한 내용은 표시된 트랜잭션을 사용하여 관련 데이터베이스를 일관되게 복구(전체 복구 모델)를 참조하세요.

is_user_process 시스템 프로세스를 사용자 프로세스와 구분하기 위한 열을 sys.dm_exec_sessions 쿼리합니다.

사용 권한

SQL Server 인스턴스에서 실행 중인 모든 세션을 보려면 서버에 대한 VIEW SERVER STATE 권한이 필요합니다. 그렇지 않으면 현재 세션만 사용자에게 표시됩니다.

예제

A. 모든 현재 프로세스 나열

다음 예제에서는 매개 변수 없이 모든 sp_who 현재 사용자를 보고합니다.

USE master;
GO
EXEC sp_who;
GO

B. 특정 사용자의 프로세스 나열

다음 예제에서는 로그인 이름으로 단일 현재 사용자에 대한 정보를 보는 방법을 보여 있습니다.

USE master;
GO
EXEC sp_who 'janetl';
GO

C. 모든 활성 프로세스 표시

USE master;
GO
EXEC sp_who 'active';
GO

D. 세션 ID로 식별되는 특정 프로세스 표시

USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO