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 o , vedere sys.dm_pdw_exec_requests Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) (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 , e alla funzione di gestione dinamica per recuperare l'istruzione attualmente sql_handle in esecuzione per la statement_end_offset sys.dm_exec_sql_text 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 , e alla funzione di gestione dinamica per recuperare l'istruzione attualmente sql_handle in esecuzione per la statement_start_offset sys.dm_exec_sql_text 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.
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. Non 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 worker 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 wait_resource la 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 parallelein modalità riga, assegna un thread di lavoro per coordinare i thread di lavoro responsabili del completamento SQL Server delle attività assegnate. In questa DMV è visibile solo il thread coordinatore per la richiesta. Le colonne reads , , e non vengono aggiornate writes per logical_reads il thread row_count coordinatore. Le colonne wait_type , , , e vengono aggiornate solo per wait_time last_wait_type il thread wait_resource granted_query_memory coordinatore. Per altre informazioni, vedere Guida sull'architettura dei thread e delle attività.

Autorizzazioni

Se l'utente dispone dell'autorizzazione per il server, l'utente visualizza tutte le sessioni in esecuzione nell'istanza di . In caso contrario, l'utente visualizza solo VIEW SERVER STATE SQL Server 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 per non verrà superato per i database nel gruppo di sys.dm_exec_requests 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 sys.dm_exec_requests esegue una query per trovare il batch interessante e copiarne transaction_id il relativo dall'output.

SELECT * FROM sys.dm_exec_requests;  
GO

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