Поделиться через


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