다음을 통해 공유


sp_who(Transact-SQL)

업데이트: 2006년 4월 14일

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

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]

인수

  • [ @loginame = ] 'login' | session ID | 'ACTIVE'
    결과 세트를 필터링하는 데 사용됩니다.

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

    session ID(SQL Server 2000 및 이전 버전에서는 SPID)는 SQL Server 인스턴스에 속하는 세션 ID입니다. session IDsmallint입니다.

    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)를 설정하면 세션에서 여러 개의 일괄 처리를 실행할 수 있습니다. 자세한 내용은 Using Multiple Active Result Sets (MARS)을 참조하십시오.

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

참고 항목

참조

sp_lock(Transact-SQL)
sys.sysprocesses(Transact-SQL)
시스템 저장 프로시저(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스

내역

2006년 4월 14일

용어

정의

변경된 내용SPID에 대한 참조를 세션 ID로 바꾸었습니다.

2005년 12월 5일

용어

정의

변경된 내용status 열에 대한 정의를 보강했습니다.