sys.dm_os_workers(Transact-SQL)
적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform 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)
쿼리 처리 아키텍처 가이드
스레드 및 태스크 아키텍처 가이드
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기