sys.dm_exec_requests (Transact-SQL)
Si applica a: SQL Server (tutte le versioni supportate)
database SQL di Azure
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_offset alla 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_offset alla 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_reads
e non row_count
vengono aggiornate per il thread coordinatore. Le colonne wait_type
, wait_time
, last_wait_type
, wait_resource
e 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 STATE
non 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
- Funzioni e viste a gestione dinamica
- Funzioni e viste a gestione dinamica relative all'esecuzione
- sys.dm_os_memory_clerks
- sys.dm_os_sys_info
- sys.dm_exec_query_memory_grants
- sys.dm_exec_query_plan
- sys.dm_exec_sql_text
- Oggetto SQL Statistics di SQL Server
- Guida sull'architettura di elaborazione delle query
- Guida sull'architettura dei thread e delle attività