sys.dm_os_tasks(Transact-SQL)
SQL Server 인스턴스에서 활성 상태인 각 태스크에 대해 하나의 행을 반환합니다.
열 이름 |
데이터 형식 |
설명 |
---|---|---|
task_address |
varbinary(8) |
개체의 메모리 주소입니다. |
task_state |
nvarchar(60) |
태스크의 상태입니다. 다음 중 하나일 수 있습니다. PENDING: 작업자 스레드 대기 중입니다. RUNNABLE: 실행 가능하지만 퀀텀 수신 대기 중입니다. RUNNING: 현재 스케줄러에서 실행 중입니다. SUSPENDED: 작업자가 있지만 이벤트 대기 중입니다. DONE: 완료되었습니다. SPINLOOP: spinlock에 걸렸습니다. |
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) |
개체의 부모인 태스크의 메모리 주소입니다. |
사용 권한
서버에 대한 VIEW SERVER STATE 권한이 필요합니다.
예
1.병렬 요청 모니터링
병렬로 실행되는 요청의 경우 동일한 (<session_id>, <request_id>) 조합에 대해 여러 개의 행이 표시됩니다. 다음 쿼리를 사용하여 모든 활성 요청에 대한 max degree of parallelism 서버 구성 옵션 구성을 확인할 수 있습니다.
[!참고]
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;
2.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