sys.dm_os_workers

업데이트: 2006년 4월 14일

시스템의 각 작업자에 대해 행을 반환합니다.

열 이름 데이터 형식 설명

worker_address

varbinary(8)

작업자의 메모리 주소입니다.

status

int

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

is_preemptive

bit

1 = 작업자가 선점형 일정을 사용하여 실행되고 있습니다. 외부 코드를 실행 중인 작업자는 선점형 일정을 사용하여 실행됩니다.

is_fiber

bit

1 = 작업자가 경량 풀링을 사용하여 실행되고 있습니다. 자세한 내용은 sp_configure(Transact-SQL)를 참조하십시오.

is_sick

bit

1 = 작업자가 spinlock을 획득하려고 하는 중 멈췄습니다. 이 비트가 설정된 경우 자주 액세스되는 개체에 경합 문제가 있음을 나타내는 것일 수 있습니다.

is_in_cc_exception

bit

1 = 작업자가 현재 비-SQL Server(Non-SQL Server) 예외를 처리하고 있습니다.

is_fatal_exception

bit

이 작업자에 치명적인 예외가 발생했는지 지정합니다.

is_inside_catch

bit

1 = 작업자가 현재 예외를 처리하고 있습니다.

is_in_polling_io_completion_routine

bit

1 = 작업자가 현재 보류 중인 I/O에 대해 I/O 완료 루틴을 실행하고 있습니다. 자세한 내용은 sys.dm_io_pending_io_requests를 참조하십시오.

context_switch_count

int

이 작업자가 수행한 스케줄러 컨텍스트 전환 수입니다.

pending_io_count

int

이 작업자가 수행한 실제 I/O 수입니다.

pending_io_byte_count

bigint

이 작업자에 대해 보류 중인 모든 실제 I/O의 총 바이트 수입니다.

pending_io_byte_average

int

이 작업자에 대한 실제 I/O의 평균 바이트 수입니다.

wait_started_ms_ticks

int

이 작업자가 SUSPENDED 상태로 들어간 지정 시간(ms_ticks)입니다. sys.dm_os_sys_infoms_ticks에서 이 값을 빼면 작업자가 대기한 시간(밀리초)이 반환됩니다.

wait_resumed_ms_ticks

int

이 작업자가 RUNNABLE 상태로 들어간 지정 시간(ms_ticks)입니다. sys.dm_os_sys_infoms_ticks에서 이 값을 빼면 작업자가 실행 가능 큐에서 대기한 시간(밀리초)이 반환됩니다.

task_bound_ms_ticks

bigint

이 작업자에 작업이 바인딩되는 지정 시간(ms_ticks)입니다.

worker_created_ms_ticks

bigint

작업자가 생성되는 지정 시간(ms_ticks)입니다.

exception_num

int

이 작업자에 마지막으로 발생한 예외의 오류 번호입니다.

exception_severity

int

이 작업자에 마지막으로 발생한 예외의 심각도입니다.

exception_address

varbinary(8)

예외를 발생시킨 코드 주소입니다.

locale

int

작업자에 대한 로캘 LCID 설정입니다.

affinity

bigint

작업자에 대한 선호도 설정입니다. 자세한 내용은 sys.dm_os_schedulers를 참조하십시오.

state

nvarchar(60)

작업자 상태입니다. 다음 값 중 하나를 사용할 수 있습니다.

INIT = 작업자가 현재 초기화되고 있습니다.

RUNNING = 작업자가 현재 선점형 모드나 비선점형 모드로 실행되고 있습니다.

RUNNABLE = 스케줄러에서 작업자를 실행할 준비가 되었습니다.

SUSPENDED = 작업자가 현재 일시 중지되어 이벤트에서 신호를 보낼 때까지 기다리고 있습니다.

start_quantum

bigint

이 작업자의 현재 실행이 시작된 시간(cpu_ticks)입니다.

end_quantum

bigint

이 작업자의 현재 실행이 끝난 시간(cpu_ticks)입니다.

last_wait_type

nvarchar(60)

마지막 대기의 유형입니다. 대기 유형 목록은 sys.dm_os_wait_stats를 참조하십시오.

return_code

int

마지막 대기에서 반환된 값입니다. 다음 값 중 하나를 사용할 수 있습니다.

0 = 성공

3 = 교착

4 = 중간 시작

258 = 시간 초과

quantum_used

bigint

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

max_quantum

bigint

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

boost_count

int

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

tasks_processed_count

int

이 작업자가 처리한 작업 수입니다.

fiber_address

varbinary(8)

이 작업자와 연관된 파이버의 메모리 주소입니다.

NULL = SQL Server가 경량 풀링을 사용하도록 구성되지 않았습니다.

task_address

varbinary(8)

현재 작업의 메모리 주소입니다. 자세한 내용은 sys.dm_os_tasks를 참조하십시오.

memory_object_address

varbinary(8)

작업자 메모리 개체의 메모리 주소입니다. 자세한 내용은 sys.dm_os_memory_objects를 참조하십시오.

thread_address

varbinary(8)

이 작업자와 연관된 스레드의 메모리 주소입니다. 자세한 내용은 sys.dm_os_threads를 참조하십시오.

signal_worker_address

varbinary(8)

이 개체에 마지막으로 신호를 보낸 작업자의 메모리 주소입니다. 자세한 내용은 sys.dm_os_workers를 참조하십시오.

scheduler_address

varbinary(8)

스케줄러의 메모리 주소입니다. 자세한 내용은 sys.dm_os_schedulers를 참조하십시오.

주의

작업자 상태가 RUNNING이고 작업자가 비선점형 모드로 실행되고 있으면 작업자 주소가 sys.dm_os_schedulersactive_worker_address와 일치합니다.

이벤트를 기다리고 있는 작업자가 신호를 받으면 해당 작업자가 실행 가능한 큐의 맨 처음에 배치됩니다. SQL Server에서는 이 작업이 연속해서 1,000회 발생할 수 있습니다. 그런 다음 작업자가 큐 끝에 배치됩니다. 작업자를 큐 끝으로 이동하면 성능에 약간 영향을 줍니다.

사용 권한

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

다음 쿼리를 사용하여 SUSPENDED 또는 RUNNABLE 상태에서 작업자가 실행된 시간을 확인할 수 있습니다.

SELECT 
    t1.session_id,
    CONVERT(varchar(10), t1.status) AS status,
    CONVERT(varchar(15), t1.command) AS command,
    CONVERT(varchar(10), t2.state) AS worker_state,
    w_suspended = 
      CASE t2.wait_started_ms_ticks
        WHEN 0 THEN 0
        ELSE 
          t3.ms_ticks - t2.wait_started_ms_ticks
      END,
    w_runnable = 
      CASE t2.wait_resumed_ms_ticks
        WHEN 0 THEN 0
        ELSE 
          t3.ms_ticks - t2.wait_resumed_ms_ticks
      END
  FROM sys.dm_exec_requests AS t1
  INNER JOIN sys.dm_os_workers AS t2
    ON t2.task_address = t1.task_address
  CROSS JOIN sys.dm_os_sys_info AS t3
  WHERE t1.scheduler_id IS NOT NULL;

결과 집합은 다음과 같습니다.

session_id status     command         worker_state w_suspended w_runnable
---------- ---------- --------------- ------------ ----------- --------------------
4          background LAZY WRITER     SUSPENDED    688         688
6          background LOCK MONITOR    SUSPENDED    4657        4657
19         background BRKR TASK       SUSPENDED    603820344   603820344
14         background BRKR EVENT HNDL SUSPENDED    63583641    63583641
51         running    SELECT          RUNNING      0           0
2          background RESOURCE MONITO RUNNING      0           603825954
3          background LAZY WRITER     SUSPENDED    422         422
7          background SIGNAL HANDLER  SUSPENDED    603820485   603820485
13         background TASK MANAGER    SUSPENDED    603824704   603824704
18         background BRKR TASK       SUSPENDED    603820407   603820407
9          background TRACE QUEUE TAS SUSPENDED    454         454
52         suspended  SELECT          SUSPENDED    35094       35094
1          background RESOURCE MONITO RUNNING      0           603825954

출력에서 w_runnablew_suspended가 같으면 작업자가 SUSPENDED 상태에 있는 시간을 나타냅니다. 그렇지 않으면 w_runnable은 작업자가 RUNNABLE 상태에서 소요한 시간을 나타냅니다. 출력에서 세션 5235,094 밀리초 동안 SUSPENDED됩니다.

참고 항목

참조

동적 관리 뷰 및 함수
SQL Server 운영 체제 관련 동적 관리 뷰

관련 자료

메모리 아키텍처

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 4월 14일

변경된 내용

wait_resumed_ms_ticks에 대한 설명을 수정했습니다.