sys.dm_os_tasks(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
SQL Server 인스턴스에서 활성화된 각 작업에 대해 하나의 행을 반환합니다. 작업은 SQL Server의 기본 실행 단위입니다. 작업의 예로는 쿼리, 로그인, 로그아웃 및 시스템 작업(예: 고스트 정리 작업, 검사점 작업, 로그 작성기, 병렬 다시 실행 작업)이 있습니다. 작업에 대한 자세한 내용은 스레드 및 작업 아키텍처 가이드를 참조하세요.
참고 항목
Azure Synapse Analytics 또는 PDW(Analytics Platform System)에서 이를 호출하려면 이름 sys.dm_pdw_nodes_os_tasks 사용합니다. 이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.
열 이름 | 데이터 형식 | 설명 |
---|---|---|
task_address | varbinary(8) | 개체의 메모리 주소입니다. |
task_state | nvarchar(60) | 태스크의 상태입니다. 다음 중 하나가 될 수 있습니다. 보류 중: 작업자 스레드를 기다리는 중입니다. RUNNABLE: 실행 가능하지만 양자 수신을 기다리고 있습니다. 실행 중: 현재 스케줄러에서 실행 중입니다. SUSPENDED: 작업자가 있지만 이벤트를 기다리고 있습니다. 완료: 완료되었습니다. SPINLOOP: 스핀 잠금에 갇혀 있습니다. |
context_switches_count | int | 이 작업이 완료된 스케줄러 컨텍스트 스위치의 수입니다. |
pending_io_count | int | 이 태스크로 수행된 실제 I/O 수입니다. |
pending_io_byte_count | bigint | 이 태스크로 수행된 I/O의 총 바이트 수입니다. |
pending_io_byte_average | int | 이 작업에서 수행하는 I/O의 평균 바이트 수입니다. |
scheduler_id | int | 부모 스케줄러의 ID입니다. 이 작업은 이 작업의 스케줄러 정보에 대한 핸들입니다. 자세한 내용은 sys.dm_os_schedulers(Transact-SQL)를 참조하세요. |
session_id | smallint | 작업과 연결된 세션의 ID입니다. |
exec_context_id | int | 작업과 연결된 실행 컨텍스트 ID입니다. |
request_id | int | 작업 요청의 ID입니다. 자세한 내용은 sys.dm_exec_requests(Transact-SQL)을 참조하세요. |
worker_address | varbinary(8) | 작업을 실행하는 작업자의 메모리 주소입니다. NULL = 작업이 작업자가 실행될 때까지 대기 중이거나 작업이 방금 실행되었습니다. 자세한 내용은 sys.dm_os_workers(Transact-SQL)를 참조 하세요. |
host_address | varbinary(8) | 호스트의 메모리 주소입니다. 0 = 호스팅이 작업을 만드는 데 사용되지 않았습니다. 이렇게 하면 이 작업을 만드는 데 사용된 호스트를 식별할 수 있습니다. 자세한 내용은 sys.dm_os_hosts(Transact-SQL)를 참조 하세요. |
parent_task_address | varbinary(8) | 개체의 부모인 작업의 메모리 주소입니다. |
pdw_node_id | int | 적용 대상: Azure Synapse Analytics, Analytics Platform System(PDW) 이 배포가 있는 노드의 식별자입니다. |
사용 권한
SQL Server 및 SQL Managed Instance에서는 VIEW SERVER STATE
권한이 필요합니다.
SQL Database Basic, S0 및 S1 서비스 목표 또는 탄력적 풀 내의 데이터베이스에 대해서는 서버 관리자 계정, Microsoft Entra 관리자 계정 또는 ##MS_ServerStateReader##
서버 역할의 멤버 자격이 필요합니다. 다른 모든 SQL Database 서비스 목표에 대해서는 데이터베이스에 대한 VIEW DATABASE STATE
권한 또는 ##MS_ServerStateReader##
서버 역할의 멤버 자격이 필요합니다.
SQL Server 2022 이상에 대한 사용 권한
서버에 대한 VIEW SERVER PERFORMANCE STATE 권한이 필요합니다.
예제
A. 병렬 요청 모니터링
병렬로 실행되는 요청의 경우 동일한 조합(<session_id, <request_id>>)에 대해 여러 행이 표시됩니다. 다음 쿼리를 사용하여 모든 활성 요청에 대한 최대 병렬 처리 수준 서버 구성 옵션을 찾습니다.
참고 항목
request_id 세션 내에서 고유합니다.
SELECT
task_address,
task_state,
context_switches_count,
pending_io_count,
pending_io_byte_count,
pending_io_byte_average,
scheduler_id,
session_id,
exec_context_id,
request_id,
worker_address,
host_address
FROM sys.dm_os_tasks
ORDER BY session_id, request_id;
B. Windows 스레드와 세션 ID 연결
다음 쿼리를 사용하여 세션 ID 값을 Windows 스레드 ID와 연결할 수 있습니다. 그런 다음 Windows 성능 모니터 스레드의 성능을 모니터링할 수 있습니다. 다음 쿼리는 절전 모드인 세션에 대한 정보를 반환하지 않습니다.
SELECT STasks.session_id, SThreads.os_thread_id
FROM sys.dm_os_tasks AS STasks
INNER JOIN sys.dm_os_threads AS SThreads
ON STasks.worker_address = SThreads.worker_address
WHERE STasks.session_id IS NOT NULL
ORDER BY STasks.session_id;
GO
참고 항목
SQL Server 운영 체제 관련 동적 관리 뷰(Transact-SQL)
스레드 및 태스크 아키텍처 가이드