sys.dm_exec_requests (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure sìAzure Synapse Analytics

Restituisce informazioni su ogni richiesta in esecuzione in SQL Server. Per altre informazioni sulle richieste, vedere la Guida all'architettura di thread e attività.

Nota

Per chiamare questo metodo dal pool SQL dedicato in Azure Synapse Analytics o Piattaforma di strumenti analitici (PDW), vedere sys.dm_pdw_exec_requests (Transact-SQL). Per i pool SQL serverless, usare sys.dm_exec_requests.

Nome colonna Tipo di dati Descrizione
session_id smallint ID della sessione a cui la richiesta è correlata. Non ammette i valori Null.
request_id int ID della richiesta. Valore univoco nel contesto della sessione. Non ammette i valori Null.
start_time datetime Timestamp relativo all'arrivo della richiesta. Non ammette i valori Null.
status nvarchar(30) Stato della richiesta. I possibili valori sono i seguenti:

Sfondo
In esecuzione
Eseguibile
Sospeso
Suspended

Non ammette i valori Null.
. nvarchar(32) Identifica il tipo di comando corrente in corso di elaborazione. I tipi di comando comuni includono i valori seguenti:

SELECT
INSERT
UPDATE
DELETE
BACKUP LOG
BACKUP DATABASE
DBCC
FOR

Per recuperare il testo della richiesta, utilizzare sys.dm_exec_sql_text con il valore sql_handle corrispondente per la richiesta. I processi interni di sistema impostano il comando in base al tipo di attività effettuata. Le attività possono includere i valori seguenti:

LOCK MONITOR
CHECKPOINTLAZY
WRITER

Non ammette i valori Null.
sql_handle varbinary(64) Token che identifica in modo univoco il batch o stored procedure cui fa parte la query. Ammette i valori Null.
statement_start_offset int Indica, in byte, a partire da 0 la posizione iniziale dell'istruzione attualmente in esecuzione per l'oggetto batch o persistente attualmente in esecuzione. Può essere usato insieme a sql_handle, e statement_end_offsetalla sys.dm_exec_sql_text funzione di gestione dinamica per recuperare l'istruzione attualmente in esecuzione per la richiesta. Ammette i valori Null.
statement_end_offset int Indica, in byte, a partire da 0 la posizione finale dell'istruzione attualmente in esecuzione per il batch o l'oggetto persistente attualmente in esecuzione. Può essere usato insieme a sql_handle, e statement_start_offsetalla sys.dm_exec_sql_text funzione di gestione dinamica per recuperare l'istruzione attualmente in esecuzione per la richiesta. Ammette i valori Null.
plan_handle varbinary(64) Token che identifica in modo univoco un piano di esecuzione di query per un batch attualmente in esecuzione. Ammette i valori Null.
database_id smallint ID del database utilizzato per eseguire la richiesta. Non ammette i valori Null.
user_id int ID dell'utente che ha inviato la richiesta. Non ammette i valori Null.
connection_id uniqueidentifier ID della connessione nella quale è arrivata la richiesta. Ammette i valori Null.
blocking_session_id smallint ID della sessione che sta bloccando la richiesta. Se questa colonna è NULL o uguale a 0, la richiesta non viene bloccata o le informazioni sulla sessione di blocco non sono disponibili o non possono essere identificate. Per altre informazioni, vedere Comprendere e risolvere i SQL Server di blocco.

-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.

-5 = Non è stato possibile determinare l'ID sessione del proprietario del latch di blocco perché non viene rilevato per questo tipo di latch, ad esempio per un latch SH.

Di per sé, blocking_session_id -5 non indica un problema di prestazioni. -5 indica che la sessione è in attesa del completamento di un'azione asincrona. Prima dell'introduzione di -5, la stessa sessione avrebbe mostrato blocking_session_id 0, anche se era ancora in uno stato di attesa.

A seconda del carico di lavoro, osservare -5 come blocking_session_id può essere un evento comune.
wait_type nvarchar(60) Se la richiesta è momentaneamente bloccata, in questa colonna viene restituito il tipo di attesa. Ammette i valori Null.

Per informazioni sui tipi di attese, vedere sys.dm_os_wait_stats (Transact-SQL).
wait_time int Se la richiesta è momentaneamente bloccata, in questa colonna viene restituita la durata dell'attesa corrente espressa in millisecondi. Non ammette i valori Null.
last_wait_type nvarchar(60) Se la richiesta è stata precedentemente bloccata, questa colonna restituisce il tipo dell'ultima attesa. Non ammette i valori Null.
wait_resource nvarchar(256) Se la richiesta è momentaneamente bloccata, questa colonna restituisce la risorsa per la quale la richiesta è in attesa. Non ammette i valori Null.
open_transaction_count int Numero di transazioni aperte per la richiesta. Non ammette i valori Null.
open_resultset_count int Numero di set di risultati aperti per la richiesta. Non ammette i valori Null.
transaction_id bigint ID della transazione nella quale viene eseguita la richiesta. Non ammette i valori Null.
context_info varbinary(128) Valore di CONTEXT_INFO della sessione. Ammette i 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 ammette i valori Null.
estimated_completion_time bigint Solo interno. Non ammette i valori Null.
cpu_time int Tempo della CPU utilizzato dalla richiesta, espresso in millisecondi. Non ammette i valori Null.
total_elapsed_time int Tempo totale, in millisecondi, trascorso dall'arrivo della richiesta. Non ammette i valori Null.
scheduler_id int ID dell'utilità di pianificazione che sta pianificando la richiesta. Ammette i valori Null.
task_address varbinary(8) Indirizzo di memoria allocato all'attività associata alla richiesta. Ammette i valori Null.
reads bigint Numero di letture effettuate dalla richiesta. Non ammette i valori Null.
writes bigint Numero di scritture effettuate dalla richiesta. Non ammette i valori Null.
logical_reads bigint Numero di letture logiche effettuate dalla richiesta. Non ammette i valori Null.
text_size int Impostazione di TEXTSIZE per la richiesta. Non ammette i valori Null.
Linguaggio nvarchar(128) Impostazione di LANGUAGE per la richiesta. Ammette i valori Null.
date_format nvarchar(3) Impostazione di DATEFORMAT per la richiesta. Ammette i valori Null.
date_first smallint Impostazione di DATEFIRST per la richiesta. Non ammette i valori Null.
quoted_identifier bit 1 = QUOTED_IDENTIFIER è impostata su ON per la richiesta. Negli altri casi è 0.

Non ammette i valori Null.
arithabort bit 1 = ARITHABORT è impostata su ON per la richiesta. Negli altri casi è 0.

Non ammette i valori Null.
ansi_null_dflt_on bit 1 = ANSI_NULL_DFLT_ON è impostata su ON per la richiesta. Negli altri casi è 0.

Non ammette i valori Null.
ansi_defaults bit 1 = ANSI_DEFAULTS è impostata su ON per la richiesta. Negli altri casi è 0.

Non ammette i valori Null.
ansi_warnings bit 1 = ANSI_WARNINGS è impostata su ON per la richiesta. Negli altri casi è 0.

Non ammette i valori Null.
ansi_padding bit 1 = ANSI_PADDING è impostata su ON per la richiesta.

Negli altri casi è 0.

Non ammette i valori Null.
ansi_nulls bit 1 = ANSI_NULLS è impostata su ON per la richiesta. Negli altri casi è 0.

Non ammette i valori Null.
concat_null_yields_null bit 1 = CONCAT_NULL_YIELDS_NULL è impostata su ON per la richiesta. Negli altri casi è 0.

Non ammette i valori Null.
transaction_isolation_level smallint Livello di isolamento con cui è stata creata la transazione per questa richiesta. Non ammette i valori Null.
0 = Non specificato
1 = ReadUncomitted
2 = ReadCommitted
3 = Repeatable
4 = Serializable
5 = Snapshot
lock_timeout int Periodo di timeout del blocco, espresso in millisecondi, per la richiesta. Non ammette i valori Null.
deadlock_priority int Impostazione di DEADLOCK_PRIORITY per la richiesta. Non ammette i valori Null.
row_count bigint Numero di righe restituite al client dalla richiesta. Non ammette i valori Null.
prev_error int Ultimo errore che si è verificato durante l'esecuzione della richiesta. Non ammette i valori Null.
nest_level int Livello di nidificazione corrente del codice eseguito nella richiesta. Non ammette i valori Null.
granted_query_memory int Numero di pagine allocate all'esecuzione di una query nella richiesta. Non ammette i 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 ammette i valori Null.
group_id int ID del gruppo del carico di lavoro a cui appartiene la query. Non ammette i 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.
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 del piano di query per individuare il costo cumulativo di query con piani di esecuzione analoghi.
statement_sql_handle varbinary(64) Si applica a: SQL Server 2014 (12.x) e versioni successive.

SQL handle della singola query.

Questa colonna è NULL se Query Store non è abilitato per il database.
statement_context_id bigint Si applica a: SQL Server 2014 (12.x) e versioni successive.

Chiave esterna facoltativa da sys.query_context_settings.

Questa colonna è NULL se Query Store non è abilitato per il database.
dop int Si applica a: SQL Server 2016 (13.x) e versioni successive.

Grado di parallelismo della query.
parallel_worker_count int Si applica a: SQL Server 2016 (13.x) e versioni successive.

Numero di processi di lavoro paralleli riservati se si tratta di una query parallela.
external_script_request_id uniqueidentifier Si applica a: SQL Server 2016 (13.x) e versioni successive.

ID della richiesta di script esterno associato alla richiesta corrente.
is_resumable bit Si applica a: SQL Server 2017 (14.x) e versioni successive.

Indica se la richiesta è un'operazione sull'indice resumable.
page_resource binary(8) Si applica a: SQL Server 2019 (15.x)

Rappresentazione esadecimale a 8 byte della risorsa di pagina se la wait_resource colonna contiene una pagina. Per altre informazioni, vedere sys.fn_PageResCracker.
page_server_reads bigint Si applica a: database SQL di Azure Hyperscale

Numero di operazioni di lettura del server di pagine eseguite dalla richiesta. Non ammette i valori Null.
     

Commenti

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 questa DMW non includono il tempo trascorso in modalità preemptive.

Quando si eseguono richieste parallele in modalità riga, SQL Server assegna un thread di lavoro per coordinare i thread di lavoro responsabili del completamento delle attività assegnate. In questa DMV è visibile solo il thread coordinatore per la richiesta. Le colonne reads, writes, logical_readse non row_count vengono aggiornate per il thread coordinatore. Le colonne wait_type, wait_time, last_wait_type, wait_resourcee vengono granted_query_memory aggiornate solo per il thread coordinatore. Per altre informazioni, vedere Guida sull'architettura dei thread e delle attività.

Autorizzazioni

Se l'utente dispone VIEW SERVER STATE dell'autorizzazione per il server, SQL Serverl'utente visualizza tutte le sessioni in esecuzione nell'istanza di . In caso contrario, l'utente visualizza solo la sessione corrente. VIEW SERVER STATEnon può essere concesso in database SQL di Azure pertanto sys.dm_exec_requests è sempre limitato alla connessione corrente.

In Always-On, se la replica secondaria è impostata su sola finalità di lettura, la connessione al database secondario deve specificare la finalità dell'applicazione nei parametri della stringa di connessione aggiungendo applicationintent=readonly. In caso contrario, il controllo di accesso sys.dm_exec_requests per non verrà superato per i database nel gruppo di disponibilità, anche se è VIEW SERVER STATE presente l'autorizzazione .

Esempi

R. 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

L'esempio seguente esegue sys.dm_exec_requests una query per trovare il batch interessante e copiarne il transaction_id relativo dall'output.

SELECT * FROM sys.dm_exec_requests;  
GO

Quindi, per trovare informazioni sui blocchi, usare copiato con transaction_id 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 vengono eseguite query sys.dm_exec_requests per trovare informazioni sulle 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  

D. Ordinamento delle richieste esistenti in base alla CPU

SELECT 
   req.session_id
   , req.start_time
   , cpu_time 'cpu_time_ms'
   , object_name(st.objectid,st.dbid) 'ObjectName' 
   , substring
      (REPLACE
        (REPLACE
          (SUBSTRING
            (ST.text
            , (req.statement_start_offset/2) + 1
            , (
               (CASE statement_end_offset
                  WHEN -1
                  THEN DATALENGTH(ST.text)  
                  ELSE req.statement_end_offset
                  END
                    - req.statement_start_offset)/2) + 1)
       , CHAR(10), ' '), CHAR(13), ' '), 1, 512)  AS statement_text  
FROM sys.dm_exec_requests AS req  
   CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) as ST
   ORDER BY cpu_time desc;
GO

Vedi anche

Passaggi successivi