sys.dm_os_tasks
Возвращает одну строку для каждой активной задачи в экземпляре SQL Server.
Имя столбца |
Тип данных |
Описание |
---|---|---|
task_address |
varbinary(8) |
Адрес объекта в памяти. |
task_state |
nvarchar(60) |
Состояние задачи. Может иметь одно из следующих значений. PENDING: ожидание рабочего потока. RUNNABLE: задачу можно запустить, но она ожидает получения такта. RUNNING: выполняется в данный момент в планировщике. SUSPENDED: у задачи есть исполнитель, но она ожидает события. DONE: выполнена. SPINLOOP: заблокирована с ожиданием из-за занятости. |
context_switches_count |
int |
Число контекстных переключений планировщика, которые задача уже выполнила. |
pending_io_count |
int |
Количество физических операций ввода-вывода, выполняемых этой задачей. |
pending_io_byte_count |
bigint |
Суммарное количество байт, обработанных в операциях ввода-вывода, выполняемых этой задачей. |
pending_io_byte_average |
int |
Среднее количество байт, обработанных в операциях ввода-вывода, выполняемых этой задачей. |
scheduler_id |
int |
Идентификатор родительского планировщика. Это дескриптор сведений планировщика для этой задачи. Дополнительные сведения см. в разделе sys.dm_os_schedulers (Transact-SQL). |
session_id |
smallint |
Идентификатор сеанса, связанного с задачей. |
exec_context_id |
int |
Идентификатор контекста выполнения, связанного с задачей. |
request_id |
int |
Идентификатор запроса задачи. Дополнительные сведения см. в разделе sys.dm_exec_requests (Transact-SQL). |
worker_address |
varbinary(8) |
Адрес в памяти для исполнителя, выполняющего задачу. NULL = Задача либо ожидает готовности исполнителя, либо выполнение задачи только что завершилось. Дополнительные сведения см. в разделе sys.dm_os_workers. |
host_address |
varbinary(8) |
Адрес сервера в памяти. 0 = Задача создавалась без помощи сервера. Помогает идентифицировать сервер, использованный для создания этой задачи. Дополнительные сведения см. в разделе sys.dm_os_hosts. |
Разрешение
Требуется разрешение VIEW SERVER STATE для сервера.
Примеры
А. Наблюдение за параллельными запросами
Для запросов, которые выполняются параллельно, будет отображено несколько строк для каждого сочетания (<идентификатор_сеанса>, <идентификатор_запроса>). Используйте следующий запрос, чтобы получить степень параллелизма для всех активных запросов.
Примечание |
---|
идентификатор_запроса является уникальным в пределах сеанса. |
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;
Б. Сопоставление идентификатора сеанса с потоками Windows
Можно использовать следующий запрос для сопоставления значения идентификатора сеанса со значением идентификатора потока Windows. Затем можно наблюдать за производительностью потока в системном мониторе 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