다음을 통해 공유


sys.dm_os_threads(Transact-SQL)

SQL Server 프로세스에서 실행되고 있는 모든 SQL Server 운영 체제 스레드를 목록으로 반환합니다.

열 이름

데이터 형식

설명

thread_address

varbinary(8)

스레드의 메모리 주소(기본 키)입니다.

started_by_sqlservr

bit

스레드 시작자를 나타냅니다.

1 = SQL Server에서 스레드를 시작했습니다.

0 = SQL Server 내의 확장 저장 프로시저와 같은 다른 구성 요소에서 스레드를 시작했습니다.

os_thread_id

int

운영 체제가 할당한 스레드의 ID입니다.

status

int

내부 상태 플래그입니다.

instruction_address

varbinary(8)

현재 실행 중인 명령의 주소입니다.

creation_time

datetime

이 스레드가 생성된 시간입니다.

kernel_time

bigint

이 스레드가 사용하는 커널 시간입니다.

usermode_time

bigint

이 스레드가 사용하는 사용자 시간입니다.

stack_base_address

varbinary(8)

이 스레드에 대한 최상위 스택 주소의 메모리 주소입니다.

stack_end_address

varbinary(8)

이 스레드에 대한 최하위 스택 주소의 메모리 주소입니다.

stack_bytes_committed

int

스택에서 커밋된 바이트 수입니다.

stack_bytes_used

int

스레드에서 사용하고 있는 바이트 수입니다.

affinity

bigint

이 스레드가 실행되고 있는 것으로 추정되는 CPU 마스크입니다. 이 값은 sp_configureaffinity mask 구성 옵션 값에 따라 달라집니다.

locale

int

스레드의 캐시된 로캘 LCID입니다.

priority

int

이 스레드의 우선 순위 값입니다.

token

varbinary(8)

스레드의 캐시된 가장 토큰 핸들입니다.

is_impersonating

int

이 스레드의 Win32 가장 사용 여부를 나타냅니다.

1 = 스레드에서 프로세스의 기본값과 다른 보안 자격 증명을 사용하고 있습니다. 이것은 스레드가 프로세스를 만든 엔터티와 다른 엔터티를 가장하고 있다는 것을 나타냅니다.

is_waiting_on_loader_lock

int

스레드가 로더 잠금을 기다리는 중인지 여부를 나타내는 운영 체제 상태입니다.

fiber_data

varbinary(8)

스레드에서 실행 중인 현재의 Win32 파이버입니다. SQL Server에 경량 풀링이 구성된 경우에만 적용됩니다.

thread_handle

varbinary(8)

내부적으로만 사용됩니다.

event_handle

varbinary(8)

내부적으로만 사용됩니다.

scheduler_address

varbinary(8)

이 스레드와 연관된 스케줄러의 메모리 주소입니다. 자세한 내용은 sys.dm_os_schedulers(Transact-SQL)를 참조하십시오.

worker_address

varbinary(8)

이 스레드에 바인딩된 작업자의 메모리 주소입니다. 자세한 내용은 sys.dm_os_workers(Transact-SQL)를 참조하십시오.

fiber_context_address

varbinary(8)

내부 파이버 컨텍스트 주소입니다. SQL Server에 경량 풀링이 구성된 경우에만 적용됩니다.

self_address

varbinary(8)

내부 일관성 포인터입니다.

사용 권한

서버에 대한 VIEW SERVER STATE 권한이 필요합니다.

시작 시 SQL Server에서 스레드를 시작한 다음 작업자를 해당 스레드에 연결합니다. 그러나 확장 저장 프로시저와 같은 외부 구성 요소가 SQL Server 프로세스에서 스레드를 시작할 수 있습니다. SQL Server는 이러한 스레드를 제어하지 않습니다. sys.dm_os_threads는 SQL Server 프로세스에서 리소스를 사용하는 Rogue 스레드에 대한 정보를 제공할 수 있습니다.

다음 쿼리는 SQL Server에서 시작하지 않은 스레드를 실행하는 작업자와 실행 소요 시간을 확인하는 데 사용됩니다.

[!참고]

간단하게 다음 쿼리에서는 SELECT 문에 별표(*)를 사용합니다. 특히 카탈로그 뷰, 동적 관리 뷰 및 시스템 테이블 반환 함수에 대해서는 별표(*)를 사용하지 않아야 합니다. 이후 MicrosoftSQL Server 업그레이드 및 릴리스에서 이러한 뷰 및 함수에 열이 추가되고 열 순서가 변경될 수 있습니다. 그렇게 되면 특정 열 순서 및 열 수를 예상하는 응용 프로그램에서 오류가 발생할 수 있습니다.

SELECT *
  FROM sys.dm_os_threads
  WHERE started_by_sqlservr = 0;