Condividi tramite


sys.dm_exec_requests (Transact-SQL)

Restituisce informazioni su ciascuna richiesta in esecuzione all'interno di SQL Server.

Nota

Per eseguire codice esterno a SQL Server, ad esempio stored procedure estese e query distribuite, è necessario che un thread venga eseguito esternamente al controllo dell'utilità di pianificazione in modalità non preemptive. A tale scopo, un thread di lavoro passa alla modalità preemptive. I valori temporali restituiti da DMV non includono il tempo trascorso in modalità preemptive.

Nome colonna

Tipo di dati

Descrizione

session_id

smallint

ID della sessione a cui la richiesta è correlata. Non sono ammessi valori Null.

request_id

int

ID della richiesta. Valore univoco nel contesto della sessione. Non sono ammessi valori Null.

start_time

datetime

Timestamp relativo all'arrivo della richiesta. Non sono ammessi valori Null.

status

nvarchar(30)

Stato della richiesta. Di seguito sono riportati i possibili valori:

  • In background

  • In esecuzione

  • Eseguibile

  • Inattivo

  • Sospeso

Non sono ammessi valori Null.

command

nvarchar(16)

Identifica il tipo di comando corrente in corso di elaborazione. I tipi di comandi più comuni sono i seguenti:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • BACKUP LOG

  • BACKUP DATABASE

  • DBCC

  • WAITFOR

Il testo della richiesta può essere recuperato tramite sys.dm_exec_sql_text con la colonna sql_handle corrispondente per la richiesta. I processi interni di sistema impostano il comando in base al tipo di attività effettuata. Di seguito sono riportate le attività:

  • LOCK MONITOR

  • CHECKPOINTLAZY

  • WRITER

Non sono ammessi valori Null.

sql_handle

varbinary(64)

Mappa hash del testo SQL della richiesta. Ammette valori Null.

statement_start_offset

int

Numero di caratteri nella stored procedure o nel batch attualmente in esecuzione in cui inizia l'istruzione in esecuzione. Può essere utilizzata in combinazione con la colonna sql_handle, la colonna statement_end_offset e la funzione a gestione dinamica sys.dm_exec_sql_text per recuperare l'istruzione in esecuzione per la richiesta. Ammette valori Null.

statement_end_offset

int

Numero di caratteri nella stored procedure o nel batch attualmente in esecuzione in cui termina l'istruzione in esecuzione. Può essere utilizzata in combinazione con la colonna sql_handle, la colonna statement_end_offset e la funzione a gestione dinamica sys.dm_exec_sql_text per recuperare l'istruzione in esecuzione per la richiesta. Ammette valori Null.

plan_handle

varbinary(64)

Mappa hash del piano per l'esecuzione SQL. Ammette valori Null.

database_id

smallint

ID del database utilizzato per eseguire la richiesta. Non sono ammessi valori Null.

user_id

int

ID dell'utente che ha inviato la richiesta. Non sono ammessi valori Null.

connection_id

uniqueidentifier

ID della connessione nella quale è arrivata la richiesta. Ammette valori Null.

blocking_session_id

smallint

ID della sessione che sta bloccando la richiesta. Se questa colonna è NULL, la richiesta non è bloccata oppure le informazioni sulla sessione da cui è bloccata non sono disponibili o non possono essere identificate.

-2 = La risorsa di blocco appartiene a una transazione distribuita orfana.

-3 = La risorsa di blocco appartiene a una transazione di recupero posticipata.

-4 = Al momento non è stato possibile determinare l'ID sessione del proprietario del latch di blocco a causa di transizioni nello stato del latch interno.

wait_type

nvarchar(60)

Se la richiesta è momentaneamente bloccata, questa colonna restituisce il tipo di attesa. Ammette valori Null.

wait_time

int

Se la richiesta è momentaneamente bloccata, questa colonna restituisce la durata dell'attesa corrente espressa in millisecondi. Non sono ammessi valori Null.

last_wait_type

nvarchar(60)

Se la richiesta è stata precedentemente bloccata, questa colonna restituisce il tipo dell'ultima attesa. Non sono ammessi valori Null.

wait_resource

nvarchar(256)

Se la richiesta è momentaneamente bloccata, questa colonna restituisce la risorsa per la quale la richiesta è in attesa. Non sono ammessi valori Null.

open_transaction_count

int

Numero di transazioni aperte per la richiesta. Non sono ammessi valori Null.

open_resultset_count

int

Numero di set di risultati aperti per la richiesta. Non sono ammessi valori Null.

transaction_id

bigint

ID della transazione nella quale viene eseguita la richiesta. Non sono ammessi valori Null.

context_info

varbinary(128)

Valore di CONTEXT_INFO della sessione. Ammette valori Null.

percent_complete

real

Percentuale di lavoro completata per i comandi seguenti:

  • ALTER INDEX REORGANIZE

  • Opzione AUTO_SHRINK con ALTER DATABASE

  • BACKUP DATABASE

  • DBCC CHECKDB

  • DBCC CHECKFILEGROUP

  • DBCC CHECKTABLE

  • DBCC INDEXDEFRAG

  • DBCC SHRINKDATABASE

  • DBCC SHRINKFILE

  • RECOVERY

  • RESTORE DATABASE,

  • ROLLBACK

  • TDE ENCRYPTION

Non sono ammessi valori Null.

estimated_completion_time

bigint

Solo per uso interno. Non sono ammessi valori Null.

cpu_time

int

Tempo della CPU utilizzato dalla richiesta, espresso in millisecondi. Non sono ammessi valori Null.

total_elapsed_time

int

Tempo totale, in millisecondi, trascorso dall'arrivo della richiesta. Non sono ammessi valori Null.

scheduler_id

int

ID dell'utilità di pianificazione che sta pianificando la richiesta. Non sono ammessi valori Null.

task_address

varbinary(8)

Indirizzo di memoria allocato all'attività associata alla richiesta. Ammette valori Null.

reads

bigint

Numero di letture effettuate dalla richiesta. Non sono ammessi valori Null.

writes

bigint

Numero di scritture effettuate dalla richiesta. Non sono ammessi valori Null.

logical_reads

bigint

Numero di letture logiche effettuate dalla richiesta. Non sono ammessi valori Null.

text_size

int

Impostazione di TEXTSIZE per la richiesta. Non sono ammessi valori Null.

language

nvarchar(128)

Impostazione di LANGUAGE per la richiesta. Ammette valori Null.

date_format

nvarchar(3)

Impostazione di DATEFORMAT per la richiesta. Ammette valori Null.

date_first

smallint

Impostazione di DATEFIRST per la richiesta. Non sono ammessi valori Null.

quoted_identifier

bit

1 = QUOTED_IDENTIFIER è impostata su ON per la richiesta. Negli altri casi è 0.

Non sono ammessi valori Null.

arithabort

bit

1 = ARITHABORT è impostata su ON per la richiesta. Negli altri casi è 0.

Non sono ammessi valori Null.

ansi_null_dflt_on

bit

1 = ANSI_NULL_DFLT_ON è impostata su ON per la richiesta. Negli altri casi è 0.

Non ammette valori Null.

ansi_defaults

bit

1 = ANSI_DEFAULTS è impostata su ON per la richiesta. Negli altri casi è 0.

Non sono ammessi valori Null.

ansi_warnings

bit

1 = ANSI_WARNINGS è impostata su ON per la richiesta. Negli altri casi è 0.

Non sono ammessi valori Null.

ansi_padding

bit

1 = ANSI_PADDING è impostata su ON per la richiesta.

Negli altri casi è 0.

Non sono ammessi valori Null.

ansi_nulls

bit

1 = ANSI_NULLS è impostata su ON per la richiesta. Negli altri casi è 0.

Non sono ammessi valori Null.

concat_null_yields_null

bit

1 = CONCAT_NULL_YIELDS_NULL è impostata su ON per la richiesta. Negli altri casi è 0.

Non sono ammessi valori Null.

transaction_isolation_level

smallint

Livello di isolamento con cui è stata creata la transazione per questa richiesta. Non sono ammessi valori Null.

lock_timeout

int

Periodo di timeout del blocco, espresso in millisecondi, per la richiesta. Non sono ammessi valori Null.

deadlock_priority

int

Impostazione di DEADLOCK_PRIORITY per la richiesta. Non ammette valori Null.

row_count

bigint

Numero di righe restituite al client dalla richiesta. Non sono ammessi valori Null.

prev_error

int

Ultimo errore che si è verificato durante l'esecuzione della richiesta. Non ammette valori Null.

nest_level

int

Livello di nidificazione corrente del codice eseguito nella richiesta. Non sono ammessi valori Null.

granted_query_memory

int

Numero di pagine allocate all'esecuzione di una query nella richiesta. Non sono ammessi valori Null.

executing_managed_code

bit

Indica se una richiesta specifica sta eseguendo oggetti CLR (Common Language Runtime) quali routine, tipi e trigger. Il valore rimane impostato per l'intero periodo di permanenza di un oggetto CLR nello stack, anche durante l'esecuzione di istruzioni Transact-SQL internamente a CLR. Non sono ammessi valori Null.

group_id

int

ID del gruppo del carico di lavoro a cui appartiene la query. Non sono ammessi valori Null.

query_hash

binary(8)

Valore hash binario calcolato sulla query che consente di identificare query con logica analoga. È possibile utilizzare il valore hash della query per determinare l'utilizzo delle risorse aggregate per query che differiscono solo per valori letterali. Per ulteriori informazioni, vedere Ricerca e ottimizzazione di query analoghe tramite valori hash della query e del piano di query.

query_plan_hash

binary(8)

Valore hash binario calcolato sul piano di esecuzione di query che consente di identificare piani di esecuzioni analoghi. È possibile utilizzare il valore hash di query per individuare il costo cumulativo di query con piani di esecuzione analoghi. Per ulteriori informazioni, vedere Ricerca e ottimizzazione di query analoghe tramite valori hash della query e del piano di query.

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE nel server.

Nota

Se si dispone dell'autorizzazione VIEW SERVER STATE per il server, è possibile visualizzare tutte le sessioni in esecuzione nell'istanza di SQL Server. In caso contrario, è possibile visualizzare solo la sessione corrente.

Esempi

A. Ricerca del testo della query per un batch in esecuzione

Nell'esempio seguente viene eseguita una query su sys.dm_exec_requests per trovare la query specifica e copiare sql_handle dall'output.

SELECT * FROM sys.dm_exec_requests;
GO

Per ottenere il testo dell'istruzione, utilizzare il sql_handle copiato con la funzione di sistema sys.dm_exec_sql_text(sql_handle).

SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO

B. Ricerca di tutti i blocchi contenuti in un batch in esecuzione

Nell'esempio seguente viene eseguita una query su sys.dm_exec_requests per trovare il batch specifico e copiare transaction_id dall'output.

SELECT * FROM sys.dm_exec_requests;
GO

Per individuare le informazioni di blocco, utilizzare transaction_id copiato con la funzione di sistema sys.dm_tran_locks.

SELECT * FROM sys.dm_tran_locks 
WHERE request_owner_type = N'TRANSACTION' 
    AND request_owner_id = < copied transaction_id >;
GO

C. Ricerca di tutte le richieste attualmente bloccate

Nell'esempio seguente viene eseguita una query su sys.dm_exec_requests per individuare le informazioni relative alle richieste bloccate.

SELECT session_id ,status ,blocking_session_id
    ,wait_type ,wait_time ,wait_resource 
    ,transaction_id 
FROM sys.dm_exec_requests 
WHERE status = N'suspended';
GO