다음을 통해 공유


sys.dm_os_workers(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)

시스템의 모든 작업자에 대한 행을 반환합니다. 작업자에 대한 자세한 내용은 스레드 및 태스크 아키텍처 가이드를 참조하세요.

참고 항목

Azure Synapse Analytics 또는 분석 플랫폼 시스템(PDW)에서 이를 호출하려면 이름 sys.dm_pdw_nodes_os_workers를 사용합니다. 이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.

열 이름 데이터 형식 설명
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 예외가 아닌 다른 예외를 처리하고 있습니다.
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(Transact-SQL)를 참조하세요.
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 bigint 이 작업자가 SUSPENDED 상태로 들어간 지정 시간(ms_ticks)입니다. sys.dm_os_sys_info에서 이 값을 빼면 작업자가 대기한 시간(밀리초)이 반환됩니다.
wait_resumed_ms_ticks bigint 이 작업자가 RUNNABLE 상태로 들어간 지정 시간(ms_ticks)입니다. sys.dm_os_sys_info의 ms_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) 예외를 throw한 코드 주소
선호도 bigint 작업자의 스레드 선호도입니다. sys.dm_os_threads(Transact-SQL)의 스레드 선호도와 일치합니다.
state nvarchar(60) 작업자 상태입니다. 다음 값 중 하나일 수 있습니다.

INIT = 작업자가 현재 초기화 중입니다.

RUNNING = 작업자가 현재 비선점적으로 또는 선점적으로 실행 중입니다.

RUNNABLE = 작업자가 스케줄러에서 실행할 준비가 된 경우

SUSPENDED = 작업자가 현재 일시 중단되어 이벤트가 신호를 보낼 때까지 기다립니다.
start_quantum bigint 이 작업자의 현재 실행이 시작된 시간(밀리초)입니다.
end_quantum bigint 이 작업자의 현재 실행이 종료된 시간(밀리초)입니다.
last_wait_type nvarchar(60) 마지막 대기의 유형입니다. 대기 형식 목록은 sys.dm_os_wait_stats(Transact-SQL)를 참조하세요.
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(Transact-SQL)를 참조하세요.
memory_object_address varbinary(8) 작업자 메모리 개체의 메모리 주소입니다. 자세한 내용은 sys.dm_os_memory_objects(Transact-SQL)를 참조하세요.
thread_address varbinary(8) 이 작업자와 연관된 스레드의 메모리 주소입니다. 자세한 내용은 sys.dm_os_threads(Transact-SQL)를 참조하세요.
signal_worker_address varbinary(8) 이 개체에 마지막으로 신호를 보낸 작업자의 메모리 주소입니다. 자세한 내용은 sys.dm_os_workers를 참조하세요.
scheduler_address varbinary(8) 스케줄러의 메모리 주소입니다. 자세한 내용은 sys.dm_os_schedulers(Transact-SQL)를 참조하세요.
processor_group smallint 이 스레드에 할당된 프로세서 그룹 ID를 저장합니다.
pdw_node_id int 적용 대상: Azure Synapse Analytics, Analytics Platform System(PDW)

이 배포가 있는 노드의 식별자입니다.

설명

작업자 상태가 실행 중이고 작업자가 비선기적으로 실행되는 경우 작업자 주소는 sys.dm_os_schedulers active_worker_address 일치합니다.

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

사용 권한

SQL Server에서 VIEW SERVER STATE 권한이 필요합니다.
SQL Database 프리미엄 계층에서 데이터베이스에 대한 VIEW DATABASE STATE 권한이 필요합니다. SQL Database 표준 및 기본 계층에서 Server Admin 역할 멤버 자격 또는 Azure Active Directory admin 계정이 필요합니다.

SQL Server 2022 이상에 대한 사용 권한

서버에 대한 VIEW SERVER PERFORMANCE 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_runnable w_suspended 값은 작업자가 SUSPENDED 상태인 시간을 나타냅니다. 그렇지 않으면 w_runnable은 작업자가 RUNNABLE 상태에서 소요한 시간을 나타냅니다. 출력에서 세션 52 은 밀리초 단위 35,094 입니다SUSPENDED.

참고 항목

SQL Server 운영 체제 관련 동적 관리 뷰(Transact-SQL)
쿼리 처리 아키텍처 가이드
스레드 및 태스크 아키텍처 가이드