sys.dm_exec_requests (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL 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 sospensione 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_offset alla 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_offset alla 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 = ReadUncommitted 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_type
wait_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 STATE
non 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_locks
di 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
Contenuto correlato
- Viste a gestione dinamica (DMV) di sistema
- Funzioni e viste a gestione dinamica relative all'esecuzione (Transact-SQL)
- sys.dm_os_memory_clerks (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- sys.dm_exec_query_memory_grants (Transact-SQL)
- sys.dm_exec_query_plan (Transact-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- OGGETTO SQL Server, STATISTICHE SQL
- Guida sull'architettura di elaborazione delle query
- Guida sull'architettura dei thread e delle attività
- Guida per il controllo delle versioni delle righe e il blocco delle transazioni
- Informazioni e risoluzione dei problemi di blocco di SQL Server