Partilhar via


sys.dm_os_tasks (Transact-SQL)

Retorna uma linha para cada tarefa que está ativa na instância do SQL Server.

Nome da coluna

Tipo de dados

Descrição

task_address

varbinary(8)

Endereço de memória do objeto.

task_state

nvarchar(60)

O estado da tarefa. Pode ser um dos seguintes:

PENDING: Esperando por um thread de trabalho.

RUNNABLE: Executável, mas esperando receber um quantum.

RUNNING: Atualmente em execução no agendador.

SUSPENDED: Tem um trabalhador, mas está esperando por um evento.

DONE: Concluído.

SPINLOOP: Preso em um spinlock.

context_switches_count

int

Número de alternâncias de contexto de agendador que esta tarefa completou.

pending_io_count

int

Número de E/Ss físicas executadas por esta tarefa.

pending_io_byte_count

bigint

Contagem total de bytes de E/Ss que são executadas por esta tarefa.

pending_io_byte_average

int

Contagem média de bytes de E/Ss que são executadas por esta tarefa.

scheduler_id

int

ID do agendador pai. Este é um identificador das informações de agendador para esta tarefa. Para obter mais informações, consulte sys.dm_os_schedulers (Transact-SQL).

session_id

smallint

ID da sessão que está associado à tarefa.

exec_context_id

int

ID do contexto de execução que está associado à tarefa.

request_id

int

ID da solicitação da tarefa. Para obter mais informações, consulte sys.dm_exec_requests (Transact-SQL).

worker_address

varbinary(8)

Endereço de memória do trabalhador que está executando a tarefa.

NULL = A tarefa está esperando que um trabalhador possa ser executado ou a execução da tarefa foi recém-concluída.

Para obter mais informações, consulte sys.dm_os_workers (Transact-SQL).

host_address

varbinary(8)

Endereço de memória do host.

0 = A hospedagem não foi usada para criar a tarefa. Isto ajuda a identificar o host que foi usado para criar esta tarefa.

Para obter mais informações, consulte sys.dm_os_hosts (Transact-SQL).

Permissão

Requer permissão VIEW SERVER STATE no servidor.

Exemplos

A. Monitorando solicitações paralelas

Para solicitações que são executadas em paralelo, você verá várias linhas para a mesma combinação de (<session_id>, <request_id>). Use a consulta a seguir para localizar o grau de paralelismo de todas as solicitações ativas.

ObservaçãoObservação

Um request_id é exclusivo em uma sessão.

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. Associando IDs de sessão a threads do Windows

Você pode usar a consulta a seguir para associar um valor de ID de sessão a um ID de thread do Windows. Depois, poderá monitorar o desempenho do thread no Monitor de Desempenho do Windows. A consulta a seguir não retorna informações de sessões que estão suspensas.

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