sys.dm_exec_requests (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse Analytics Platform System (PDW) in Microsoft Fabric Warehouse in Microsoft Fabric

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

Nota

Per chiamare questa operazione dal pool SQL dedicato in Azure Synapse Analytics o dal sistema della piattaforma di analisi (PDW), vedere sys.dm_pdw_exec_requests (Transact-SQL).To call this from dedicated SQL pool in Azure Synapse Analytics or Analytics Platform System (PDW), see sys.dm_pdw_exec_requests (Transact-SQL). Per il pool SQL serverless o Microsoft Fabric 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:

background
rollback
in esecuzione
runnable
sleeping
suspended

Non ammette i valori NULL.
command 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

Il testo della richiesta può essere recuperato utilizzando sys.dm_exec_sql_text con l'oggetto corrispondente sql_handle 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) È un token che identifica in modo univoco il batch o la stored procedure di cui fa parte la query. Ammette 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 attualmente in esecuzione o persistente. 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 valori Null.
statement_end_offset int Indica, in byte, a partire da 0, la posizione finale dell'istruzione attualmente in esecuzione per l'oggetto batch attualmente in esecuzione o persistente. 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 valori Null.
plan_handle varbinary(64) È un token che identifica in modo univoco un piano di esecuzione della query per un batch attualmente in esecuzione. Ammette valori Null.
database_id smallint ID del database utilizzato per eseguire la richiesta. Non ammette i valori NULL.

In database SQL di Azure i valori sono univoci all'interno di un database singolo o di un pool elastico, ma non all'interno di un server logico.
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 valori Null.
blocking_session_id smallint ID della sessione che sta bloccando la richiesta. Se questa colonna è NULL o 0, la richiesta non è bloccata o le informazioni sulla sessione di blocco non sono disponibili o non possono essere identificate. Per altre informazioni, vedere Informazioni e risoluzione dei problemi di blocco di SQL Server.

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

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

-4 = session_id del proprietario del latch di blocco non è stato possibile determinare in questo momento a causa delle transizioni di stato di latch interno.

-5 = session_id non è stato possibile determinare il proprietario del latch di blocco perché non viene rilevato per questo tipo di latch( ad esempio, per un latch SH).

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

A seconda del carico di lavoro, l'osservazione blocking_session_id = -5 può essere un'occorrenza comune.
wait_type nvarchar(60) Se la richiesta è momentaneamente bloccata, in questa colonna viene restituito il tipo di attesa. Ammette 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 valori Null.
percent_complete real Percentuale di lavoro completata per i comandi seguenti:

ALTER INDEX REORGANIZE
AUTO_SHRINK opzione 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 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 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.
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 ammette i valori NULL.
quoted_identifier bit 1 = QUOTED_IDENTIFIER è impostata su ON per la richiesta. in caso contrario, restituisce 0.

Non ammette i valori NULL.
arithabort bit 1 = ARITHABORT è impostata su ON per la richiesta. in caso contrario, restituisce 0.

Non ammette i valori NULL.
ansi_null_dflt_on bit 1 = ANSI_NULL_DFLT_ON è impostata su ON per la richiesta. in caso contrario, restituisce 0.

Non ammette i valori NULL.
ansi_defaults bit 1 = ANSI_DEFAULTS è impostata su ON per la richiesta. in caso contrario, restituisce 0.

Non ammette i valori NULL.
ansi_warnings bit 1 = ANSI_WARNINGS è impostata su ON per la richiesta. in caso contrario, restituisce 0.

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

in caso contrario, restituisce 0.

Non ammette i valori NULL.
ansi_nulls bit 1 = ANSI_NULLS è impostata su ON per la richiesta. in caso contrario, restituisce 0.

Non ammette i valori NULL.
concat_null_yields_null bit 1 = CONCAT_NULL_YIELDS_NULL è impostata su ON per la richiesta. in caso contrario, restituisce 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. viene impostato per il tempo pieno in cui un oggetto Common Language Runtime si trova nello stack, anche durante l'esecuzione di Transact-SQL dall'interno di Common Language Runtime. 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 in 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 ruoli 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 richiesta 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 di indice ripristinabile.
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 letture del server di pagine eseguite da questa richiesta. Non ammette i valori NULL.
dist_statement_id uniqueidentifier Si applica a: SQL Server 2022 e versioni successive, database SQL di Azure, Istanza gestita di SQL di Azure, Azure Synapse Analytics (solo pool serverless) e Microsoft Fabric

ID univoco per l'istruzione per la richiesta inviata. Non ammette i valori NULL.

Osservazioni:

Per eseguire codice esterno a SQL Server (ad esempio, stored procedure estese e query distribuite), un thread deve essere eseguito all'esterno del controllo dell'utilità di pianificazione non preemptive. A tale scopo, un thread di lavoro passa alla modalità preemptive. I valori temporali restituiti da questa visualizzazione a gestione dinamica non includono il tempo impiegato 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, solo il thread coordinatore è visibile per la richiesta. Le colonne reads, writes, logical_reads, e row_count non vengono aggiornate per il thread coordinatore. Le colonne wait_type, wait_time, last_wait_typewait_resource, e granted_query_memory vengono aggiornate solo per il thread coordinatore. Per altre informazioni, vedere Guida sull'architettura dei thread e delle attività.

La wait_resource colonna contiene informazioni simili a resource_description in sys.dm_tran_locks (Transact-SQL), ma viene formattata in modo diverso.

Autorizzazioni

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

Negli scenari del gruppo di disponibilità, se la replica secondaria è impostata solo sulla finalità di lettura, la connessione al database secondario deve specificare la finalità dell'applicazione nei parametri stringa di connessione aggiungendo applicationintent=readonly. In caso contrario, il controllo sys.dm_exec_requests di accesso per non passa i database nel gruppo di disponibilità, anche se VIEW SERVER STATE è presente l'autorizzazione.

Per SQL Server 2022 (16.x) e versioni successive, sys.dm_exec_requests è richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE nel server.

Esempi

R. Trovare il 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. Trovare tutti i blocchi che un batch in esecuzione contiene

Nell'esempio seguente viene sys.dm_exec_requests eseguita una query per trovare il batch interessante e copiarlo transaction_id dall'output.

SELECT * FROM sys.dm_exec_requests;
GO

Quindi, per trovare le informazioni di blocco, usare l'oggetto copiato transaction_id con la funzione sys.dm_tran_locksdi sistema .

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

C. Trovare tutte le richieste attualmente bloccate

Nell'esempio seguente vengono eseguite query per trovare informazioni sulle richieste bloccate sys.dm_exec_requests .

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. Ordinare le richieste esistenti in base alla CPU

SELECT
    [req].[session_id],
    [req].[start_time],
    [req].[cpu_time] AS [cpu_time_ms],
    OBJECT_NAME([ST].[objectid], [ST].[dbid]) AS [ObjectName],
    SUBSTRING(
        REPLACE(
            REPLACE(
                SUBSTRING(
                    [ST].[text], ([req].[statement_start_offset] / 2) + 1,
                    ((CASE [req].[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
    [req].[cpu_time] DESC;
GO