Condividi tramite


sys.dm_os_tasks (Transact-SQL)

Restituisce una riga per ogni attività in corso nell'istanza di SQL Server.

Nome colonna

Tipo di dati

Descrizione

task_address

varbinary(8)

Indirizzo di memoria dell'oggetto.

task_state

nvarchar(60)

Stato dell'attività. I possibili valori sono i seguenti:

PENDING: in attesa di un thread di lavoro.

RUNNABLE: eseguibile, ma in attesa di ricevere un quantum.

RUNNING: esecuzione in corso nell'utilità di pianificazione.

SUSPENDED: è disponibile un thread di lavoro, ma è in attesa di un evento.

DONE: completato.

SPINLOOP: bloccato in uno spinlock.

context_switches_count

int

Numero di cambi di contesto dell'utilità di pianificazione completati dall'attività.

pending_io_count

int

Numero di I/O fisici eseguiti dall'attività.

pending_io_byte_count

bigint

Numero totale di byte degli I/O eseguiti dall'attività.

pending_io_byte_average

int

Numero medio di byte degli I/O eseguiti dall'attività.

scheduler_id

int

ID dell'utilità di pianificazione padre. Si tratta di un handle per le informazioni dell'utilità di pianificazione per l'attività. Per ulteriori informazioni, vedere sys.dm_os_schedulers (Transact-SQL).

session_id

smallint

ID della sessione associata all'attività.

exec_context_id

int

ID del contesto di esecuzione associato all'attività.

request_id

int

ID della richiesta dell'attività. Per ulteriori informazioni, vedere sys.dm_exec_requests (Transact-SQL).

worker_address

varbinary(8)

Indirizzo di memoria del thread di lavoro che sta eseguendo l'attività.

NULL = Per poter essere eseguita, l'attività è in attesa di un thread di lavoro oppure l'esecuzione dell'attività è stata completata.

Per ulteriori informazioni, vedere sys.dm_os_workers (Transact-SQL).

host_address

varbinary(8)

Indirizzo di memoria dell'host.

0 = Per creare l'attività non è stato utilizzato alcun host. Ciò semplifica l'identificazione dell'host utilizzato per creare l'attività.

Per ulteriori informazioni, vedere sys.dm_os_hosts (Transact-SQL).

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE nel server.

Esempi

A. Monitoraggio di richieste in parallelo

In caso di richieste eseguite in parallelo, vengono visualizzate più righe per la stessa combinazione di (<session_id>, <request_id>). Utilizzare la query seguente per individuare il grado di parallelismo relativo a tutte le richieste attive.

[!NOTA]

request_id è univoco all'interno di ogni sessione.

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. Associazione di ID di sessione con thread di Windows

È possibile utilizzare la query seguente per associare un valore di ID di sessione a un ID di thread di Windows. È quindi possibile monitorare le prestazioni del thread in Performance Monitor di Windows. La query seguente non restituisce informazioni per le sessioni inattive.

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