sys.dm_exec_query_profiles (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
Monitora lo stato di avanzamento delle query in tempo reale mentre la query è in esecuzione. Usare, ad esempio, questa DMV per determinare la parte della query la cui esecuzione è lenta. Creare un join di questa DMV ad altre DMV di sistema utilizzando le colonne identificate nel campo descrizione. In alternativa, creare un join di questa DMV con altri contatori di prestazioni, ad esempio Performance Monitor, xperf, usando le colonne di tipo timestamp.
Tabella restituita
I contatori restituiti sono specifici per ogni operatore per ogni thread. I risultati sono dinamici e non corrispondono ai risultati delle opzioni esistenti, SET STATISTICS XML ON
ad esempio che creano output solo al termine della query.
Nome colonna | Tipo di dati | Descrizione |
---|---|---|
session_id | smallint | Identifica la sessione in cui viene eseguita la query. Fa riferimento a dm_exec_sessions.session_id. |
request_id | int | Identifica la richiesta di destinazione. Fa riferimento a dm_exec_sessions.request_id. |
sql_handle | varbinary(64) | È un token che identifica in modo univoco il batch o la stored procedure di cui fa parte la query. Fa riferimento a dm_exec_query_stats.sql_handle. |
plan_handle | varbinary(64) | Token che identifica in modo univoco un piano di esecuzione di query per un batch eseguito e il relativo piano risiede nella cache dei piani o è attualmente in esecuzione. Riferimenti dm_exec_query_stats.plan_handle. |
physical_operator_name | nvarchar(256) | Nome dell'operatore fisico. |
node_id | int | Identifica un nodo operatore nell'albero della query. |
thread_id | int | Distingue i thread (per una query parallela) che appartengono allo stesso nodo operatore della query. |
task_address | varbinary(8) | Identifica l'attività SQLOS utilizzata da questo thread. Fa riferimento a dm_os_tasks.task_address. |
row_count | bigint | Numero di righe restituite finora dall'operatore. |
rewind_count | bigint | Numero di ripristini finora. |
rebind_count | bigint | Numero di riassociazioni finora. |
end_of_scan_count | bigint | Numero di analisi terminate finora. |
estimate_row_count | bigint | Numero stimato di righe. Può essere utile per confrontare il valore estimated_row_count con il valore row_count effettivo. |
first_active_time | bigint | Ora, in millisecondi, in cui l'operatore è stato chiamato la prima volta. |
last_active_time | bigint | Ora, in millisecondi, in cui l'operatore è stato chiamato l'ultima volta. |
open_time | bigint | Timestamp apertura in millisecondi. |
first_row_time | bigint | Timestamp in cui è stata aperta la prima riga in millisecondi. |
last_row_time | bigint | Timestamp in cui è stata aperta l'ultima riga in millisecondi. |
close_time | bigint | Timestamp chiusura in millisecondi. |
elapsed_time_ms | bigint | Tempo totale trascorso (in millisecondi) usato finora dalle operazioni del nodo di destinazione. |
cpu_time_ms | bigint | Tempo totale cpu (in millisecondi) usato dalle operazioni del nodo di destinazione finora. |
database_id | smallint | ID del database contenente l'oggetto in cui vengono eseguite le letture e le scritture. |
object_id | int | Identificatore dell'oggetto in cui vengono eseguite le letture e le scritture. Fa riferimento a sys.objects.object_id. |
index_id | int | Indice in cui viene aperto il set di righe. |
scan_count | bigint | Numero di analisi tabella/indice. |
logical_read_count | bigint | Numero di letture logiche. |
physical_read_count | bigint | Numero di letture fisiche. |
read_ahead_count | bigint | Numero di letture anticipate. |
write_page_count | bigint | Numero di scritture di pagina a causa dello spill. |
lob_logical_read_count | bigint | Numero di letture logiche LOB. |
lob_physical_read_count | bigint | Numero di letture fisiche LOB. |
lob_read_ahead_count | bigint | Numero di letture anticipate LOB. |
segment_read_count | int | Numero di letture anticipate di segmenti. |
segment_skip_count | int | Numero di segmenti ignorati finora. |
actual_read_row_count | bigint | Numero di righe lette da un operatore prima dell'applicazione del predicato residuo. |
estimated_read_row_count | bigint | Si applica a: a partire da SQL Server 2016 (13.x) SP1. Numero di righe stimate da leggere da un operatore prima dell'applicazione del predicato residuo. |
Osservazioni generali
Se il nodo del piano di query non dispone di operazioni di I/O, tutti i contatori correlati all'I/O sono impostati su NULL.
I contatori correlati all'I/O segnalati da questa DMV sono più granulari di quelli segnalati da SET STATISTICS IO
nei due modi seguenti:
SET STATISTICS IO
raggruppa i contatori per tutte le operazioni di I/O in una determinata tabella. Con questa DMV si otterranno contatori separati per ogni nodo nel piano di query che esegue operazioni di I/O nella tabella.In caso di analisi parallela, questa DMV restituisce i contatori per ogni thread parallelo usato nell'analisi.
A partire da SQL Server 2016 (13.x) SP1, l'infrastruttura di profilatura delle statistiche di esecuzione delle query standard esiste side-by-side con un'infrastruttura di profilatura leggera delle statistiche di esecuzione delle query. SET STATISTICS XML ON
e SET STATISTICS PROFILE ON
usano sempre l'infrastruttura di profilatura delle statistiche di esecuzione delle query standard. Per sys.dm_exec_query_profiles
essere popolato, è necessario abilitare una delle infrastrutture di profilatura delle query. Per altre informazioni, vedere Infrastruttura di profilatura query.
Nota
La query sottoposta a indagine deve essere avviata dopo l'abilitazione dell'infrastruttura di profilatura delle query, abilitandola dopo l'avvio della query non produrrà risultati in sys.dm_exec_query_profiles
. Per altre informazioni su come abilitare le infrastrutture di profilatura delle query, vedere Infrastruttura di profilatura query.
Autorizzazioni
- In SQL Server e Istanza gestita di SQL di Azure è richiesta
VIEW DATABASE STATE
l'autorizzazione e l'appartenenza al ruolo deldb_owner
database. - Per database SQL di Azure livelli Premium, è necessaria l'autorizzazione
VIEW DATABASE STATE
nel database. - In database SQL di Azure obiettivi di servizio Basic, S0 e S1 e per i database nei pool elastici, è necessario l'account amministratore del server o l'account amministratore di Microsoft Entra. Per tutti gli altri obiettivi di servizio database SQL, l'autorizzazione
VIEW DATABASE STATE
è necessaria nel database.
Autorizzazioni per SQL Server 2022 e versioni successive
È richiesta l'autorizzazione VIEW DATABASE PERFORMANCE STATE per il database.
Esempi
Passaggio 1: Accedere a una sessione in cui si prevede di eseguire la query che verrà analizzata con sys.dm_exec_query_profiles
. Per configurare la query per la profilatura, usare SET STATISTICS PROFILE ON
. Eseguire la query in questa stessa sessione.
--Configure query for profiling with sys.dm_exec_query_profiles
SET STATISTICS PROFILE ON;
GO
--Or enable query profiling globally under SQL Server 2016 SP1 or above (not needed in SQL Server 2019)
DBCC TRACEON (7412, -1);
GO
--Next, run your query in this session, or in any other session if query profiling has been enabled globally
Passaggio 2: Accedere a una seconda sessione diversa dalla sessione in cui è in esecuzione la query.
L'istruzione seguente riepiloga lo stato di avanzamento della query attualmente in esecuzione nella sessione 54. A tale scopo, viene calcolato il numero totale di righe di output restituite da tutti i thread per ogni nodo e confrontato con il numero stimato di righe di output per tale nodo.
--Run this in a different session than the session in which your query is running.
--Note that you may need to change session id 54 below with the session id you want to monitor.
SELECT node_id,physical_operator_name, SUM(row_count) row_count,
SUM(estimate_row_count) AS estimate_row_count,
CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)
FROM sys.dm_exec_query_profiles
WHERE session_id=54
GROUP BY node_id,physical_operator_name
ORDER BY node_id;
Vedi anche
Funzioni a gestione dinamica e DMV (Transact-SQL)
Funzioni e viste a gestione dinamica relative all'esecuzione (Transact-SQL)