sys.dm_exec_query_stats (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
Restituisce statistiche sulle prestazioni aggregate per i piani di query memorizzati nella cache in SQL Server. La vista contiene una riga per ogni istruzione di query nel piano memorizzato nella cache e la durata delle righe è legata al piano stesso. Quando un piano viene rimosso dalla cache, le righe corrispondenti vengono eliminate da questa vista.
Nota
- I risultati di sys.dm_exec_query_stats possono variare con ogni esecuzione perché i dati riflettono solo le query completate e non quelle ancora in esecuzione.
- Per chiamare questa operazione dal pool SQL dedicato in Azure Synapse Analytics o dal sistema della piattaforma di analisi (PDW), usare il nome sys.dm_pdw_nodes_exec_query_stats. Per il pool SQL serverless usare sys.dm_exec_query_stats.
Nome colonna | Tipo di dati | Descrizione |
---|---|---|
sql_handle | varbinary(64) | È un token che identifica in modo univoco il batch o la stored procedure di cui fa parte la query. sql_handle, insieme a statement_start_offset e statement_end_offset, può essere usato per recuperare il testo SQL della query chiamando la funzione di gestione dinamica sys.dm_exec_sql_text. |
statement_start_offset | int | Indica, in byte e a partire da 0, la posizione iniziale della query descritta dalla riga all'interno del testo del batch o dell'oggetto persistente. |
statement_end_offset | int | Indica, in byte e a partire da 0, la posizione finale della query descritta dalla riga all'interno del testo del batch o dell'oggetto persistente. Per le versioni precedenti a SQL Server 2014 (12.x), il valore -1 indica la fine del batch. I commenti finali non sono più inclusi. |
plan_generation_num | bigint | Numero di sequenza utilizzabile per distinguere le istanze dei piani dopo una ricompilazione. |
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. Questo valore può essere passato alla funzione di gestione dinamica sys.dm_exec_query_plan per ottenere il piano di query. È sempre 0x000 quando una stored procedure compilata in modo nativo esegue una query su una tabella ottimizzata per la memoria. |
creation_time | datetime | Ora di compilazione del piano. |
last_execution_time | datetime | Ora dell'ultimo avvio dell'esecuzione del piano. |
execution_count | bigint | Numero di esecuzioni del piano a partire dall'ultima compilazione. |
total_worker_time | bigint | Quantità totale di tempo di CPU, espresso in microsecondi (con precisione al millisecondo), impiegato per le esecuzioni del piano a partire dalla relativa compilazione. Per le stored procedure compilate in modo nativo, il valore di total_worker_time non può essere accurato se più esecuzioni richiedono meno di 1 millisecondo. |
last_worker_time | bigint | Tempo di CPU, espresso in microsecondi (con precisione al millisecondo), impiegato per l'ultima esecuzione del piano. 1 |
min_worker_time | bigint | Tempo minimo di CPU, espresso in microsecondi (con precisione al millisecondo), mai impiegato dal piano durante una singola esecuzione. 1 |
max_worker_time | bigint | Tempo massimo di CPU, espresso in microsecondi (con precisione al millisecondo), mai impiegato dal piano durante una singola esecuzione. 1 |
total_physical_reads | bigint | Numero totale di letture fisiche effettuate dalle esecuzioni del piano a partire dalla relativa compilazione. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
last_physical_reads | bigint | Numero di letture fisiche eseguite durante l'ultima esecuzione del piano. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
min_physical_reads | bigint | Numero minimo di letture fisiche effettuate dal piano durante una singola esecuzione. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
max_physical_reads | bigint | Numero massimo di letture fisiche effettuate dal piano durante una singola esecuzione. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
total_logical_writes | bigint | Numero totale di scritture logiche effettuate dalle esecuzioni del piano a partire dalla relativa compilazione. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
last_logical_writes | bigint | Numero di pagine del pool di buffer interrotte durante l'esecuzione completata più di recente del piano. Dopo la lettura di una pagina, la pagina diventa dirty solo la prima volta che viene modificata. Quando una pagina diventa dirty, questo numero viene incrementato. Le modifiche successive di una pagina già dirty non influiscono su questo numero. Questo numero sarà sempre 0 quando si esegue una query su una tabella ottimizzata per la memoria. |
min_logical_writes | bigint | Numero minimo di scritture logiche effettuate dal piano durante una singola esecuzione. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
max_logical_writes | bigint | Numero massimo di scritture logiche effettuate dal piano durante una singola esecuzione. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
total_logical_reads | bigint | Numero totale di letture logiche effettuate dalle esecuzioni del piano a partire dalla sua compilazione. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
last_logical_reads | bigint | Numero di letture logiche effettuate durante l'ultima esecuzione del piano. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
min_logical_reads | bigint | Numero minimo di letture logiche effettuate dal piano durante una singola esecuzione. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
max_logical_reads | bigint | Numero massimo di letture logiche effettuate dal piano durante una singola esecuzione. È sempre 0 con esecuzione di query su una tabella ottimizzata per la memoria. |
total_clr_time | bigint | Tempo, segnalato in microsecondi (ma solo accurato in millisecondi), utilizzato all'interno di oggetti ClR (Common Language Runtime) di Microsoft .NET Framework da esecuzioni di questo piano dopo la compilazione. Gli oggetti CLR possono essere stored procedure, funzioni, trigger, tipi e aggregazioni. |
last_clr_time | bigint | Tempo, segnalato in microsecondi (ma solo accurato in millisecondi) utilizzato dall'esecuzione all'interno di oggetti CLR di .NET Framework durante l'ultima esecuzione di questo piano. Gli oggetti CLR possono essere stored procedure, funzioni, trigger, tipi e aggregazioni. |
min_clr_time | bigint | Tempo minimo, segnalato in microsecondi (ma solo accurato in millisecondi), che questo piano ha mai utilizzato all'interno di oggetti CLR di .NET Framework durante una singola esecuzione. Gli oggetti CLR possono essere stored procedure, funzioni, trigger, tipi e aggregazioni. |
max_clr_time | bigint | Tempo massimo, segnalato in microsecondi (ma solo accurato in millisecondi), che questo piano ha mai utilizzato all'interno di CLR di .NET Framework durante una singola esecuzione. Gli oggetti CLR possono essere stored procedure, funzioni, trigger, tipi e aggregazioni. |
total_elapsed_time | bigint | Tempo totale trascorso, espresso in microsecondi (con precisione al millisecondo), per le esecuzioni completate di questo piano. |
last_elapsed_time | bigint | Tempo trascorso, espresso in microsecondi (con precisione al millisecondo), per le ultime esecuzioni completate di questo piano. |
min_elapsed_time | bigint | Tempo minimo trascorso, espresso in microsecondi (con precisione al millisecondo), per un'esecuzione completata di questo piano. |
max_elapsed_time | bigint | Tempo massimo trascorso, espresso in microsecondi (con precisione al millisecondo), per un'esecuzione completata di questo piano. |
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. È sempre 0x000 quando una stored procedure compilata in modo nativo esegue una query su una tabella ottimizzata per la memoria. |
total_rows | bigint | Numero totale di righe restituite dalla query. Non può essere null. È sempre 0 quando una stored procedure compilata in modo nativo esegue una query su una tabella ottimizzata per la memoria. |
last_rows | bigint | Numero di righe restituite durante l'ultima esecuzione della query. Non può essere null. È sempre 0 quando una stored procedure compilata in modo nativo esegue una query su una tabella ottimizzata per la memoria. |
min_rows | bigint | Numero minimo di righe restituite dalla query durante un'esecuzione. Non può essere null. È sempre 0 quando una stored procedure compilata in modo nativo esegue una query su una tabella ottimizzata per la memoria. |
max_rows | bigint | Numero massimo di righe restituite dalla query durante un'esecuzione. Non può essere null. È sempre 0 quando una stored procedure compilata in modo nativo esegue una query su una tabella ottimizzata per la memoria. |
statement_sql_handle | varbinary(64) | Si applica a: SQL Server 2014 (12.x) e versioni successive. Popolato con valori non NULL solo se Query Store è attivato e raccoglie le statistiche per tale query specifica. |
statement_context_id | bigint | Si applica a: SQL Server 2014 (12.x) e versioni successive. Popolato con valori non NULL solo se Query Store è attivato e raccoglie le statistiche per tale query specifica. |
total_dop | bigint | Somma totale del grado di parallelismo usato da questo piano dopo la compilazione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
last_dop | bigint | Grado di parallelismo quando questo piano è stato eseguito l'ultima volta. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
min_dop | bigint | Grado minimo di parallelismo usato da questo piano durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
max_dop | bigint | Il grado massimo di parallelismo di questo piano mai usato durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
total_grant_kb | bigint | Quantità totale di concessioni di memoria riservate in KB ricevuti dal momento della compilazione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
last_grant_kb | bigint | Quantità di concessione di memoria riservata in KB quando questo piano è stato eseguito l'ultima volta. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
min_grant_kb | bigint | Quantità minima di concessione di memoria riservata in KB che questo piano ha mai ricevuto durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
max_grant_kb | bigint | Quantità massima di concessioni di memoria riservate in KB che questo piano ha mai ricevuto durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
total_used_grant_kb | bigint | Quantità totale di concessioni di memoria riservate in KB usato da quando è stata compilata. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
last_used_grant_kb | bigint | Quantità di concessione di memoria usata in KB quando questo piano è stato eseguito l'ultima volta. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
min_used_grant_kb | bigint | Quantità minima di concessione di memoria usata in KB questo piano mai usato durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
max_used_grant_kb | bigint | Quantità massima di concessioni di memoria usate in KB che questo piano ha mai usato durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
total_ideal_grant_kb | bigint | Quantità totale di concessioni di memoria ideali in KB stimate dal momento della compilazione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
last_ideal_grant_kb | bigint | Quantità di concessioni di memoria ideali in KB quando questo piano è stato eseguito l'ultima volta. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
min_ideal_grant_kb | bigint | Quantità minima di concessione di memoria ideale in KB che questo piano abbia mai stimato durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
max_ideal_grant_kb | bigint | Quantità massima di concessioni di memoria ideali in KB che questo piano abbia mai stimato durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
total_reserved_threads | bigint | Somma totale di thread paralleli riservati mai usati da quando è stata compilata. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
last_reserved_threads | bigint | Numero di thread paralleli riservati quando il piano è stato eseguito l'ultima volta. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
min_reserved_threads | bigint | Numero minimo di thread paralleli riservati mai usati durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
max_reserved_threads | bigint | Numero massimo di thread paralleli riservati mai usati durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
total_used_threads | bigint | Somma totale di thread paralleli usati in questo piano da quando è stata compilata. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
last_used_threads | bigint | Numero di thread paralleli usati quando questo piano è stato eseguito l'ultima volta. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
min_used_threads | bigint | Numero minimo di thread paralleli usati mai usati durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
max_used_threads | bigint | Numero massimo di thread paralleli usati mai usati durante un'esecuzione. Sarà sempre 0 per l'esecuzione di query su una tabella ottimizzata per la memoria. Si applica a: SQL Server 2016 (13.x) e versioni successive. |
total_columnstore_segment_reads | bigint | Somma totale dei segmenti columnstore letti dalla query. Non può essere null. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_reads | bigint | Numero di segmenti columnstore letti dall'ultima esecuzione della query. Non può essere null. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_reads | bigint | Numero minimo di segmenti columnstore mai letti dalla query durante un'esecuzione. Non può essere null. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_reads | bigint | Numero massimo di segmenti columnstore mai letti dalla query durante un'esecuzione. Non può essere null. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
total_columnstore_segment_skips | bigint | Somma totale dei segmenti columnstore ignorati dalla query. Non può essere null. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_skips | bigint | Numero di segmenti columnstore ignorati dall'ultima esecuzione della query. Non può essere null. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_skips | bigint | Numero minimo di segmenti columnstore mai ignorati dalla query durante un'esecuzione. Non può essere null. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_skips | bigint | Numero massimo di segmenti columnstore mai ignorati dalla query durante un'esecuzione. Non può essere null. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
total_spills | bigint | Numero totale di pagine distribuite dall'esecuzione di questa query dopo la compilazione. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
last_spills | bigint | Numero di pagine distribuite l'ultima volta che è stata eseguita la query. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
min_spills | bigint | Numero minimo di pagine che la query ha mai s spillato durante una singola esecuzione. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
max_spills | bigint | Numero massimo di pagine che la query ha mai s spillato durante una singola esecuzione. Si applica a: a partire da SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3 |
pdw_node_id | int | Identificatore del nodo in cui è attiva la distribuzione. Si applica a: Azure Synapse Analytics, Piattaforma di analisi (PDW) |
total_page_server_reads | bigint | Numero totale di letture remote del server di pagine eseguite dalle esecuzioni di questo piano dopo la compilazione. Si applica a: database SQL di Azure Hyperscale |
last_page_server_reads | bigint | Numero di letture remote del server di pagine eseguite l'ultima volta che è stato eseguito il piano. Si applica a: database SQL di Azure Hyperscale |
min_page_server_reads | bigint | Il numero minimo di server di pagine remote legge che questo piano ha mai eseguito durante una singola esecuzione. Si applica a: database SQL di Azure Hyperscale |
max_page_server_reads | bigint | Il numero massimo di server di pagine remote legge che il piano ha mai eseguito durante una singola esecuzione. Si applica a: database SQL di Azure Hyperscale |
Nota
1 Per le stored procedure compilate in modo nativo quando la raccolta di statistiche è abilitata, il tempo di lavoro viene raccolto in millisecondi. Se la query viene eseguita in meno di un millisecondo, il valore sarà 0.
Autorizzazioni
In SQL Server e Istanza gestita di SQL è richiesta l'autorizzazione VIEW SERVER STATE
.
Negli obiettivi del servizio Basic del Database SQL, S0 e S1 e per i database nei pool elastici, è richiesto l'account amministratore del server, l'account amministratore di Microsoft Entra o l’adesione nel ##MS_ServerStateReader##
al ruolo del server. Per tutti gli altri obiettivi di servizio database SQL, è necessaria l'autorizzazione VIEW DATABASE STATE
per il database o l'adesione ruolo del server ##MS_ServerStateReader##
.
Autorizzazioni per SQL Server 2022 e versioni successive
È richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE per il server.
Osservazioni:
Le statistiche nella vista vengono aggiornate quando viene completata una query.
Esempi
R. Ricerca delle prime n query
Nell'esempio seguente vengono restituite informazioni sulle prime cinque query classificate in base al tempo medio della CPU. Nell'esempio le query vengono aggregate in base al relativo valore hash del piano, in modo da raggruppare le query logicamente equivalenti in base all'utilizzo di risorse cumulativo. La colonna Sample_Statement_Text mostra un esempio della struttura di query che corrisponde all'hash della query, ma deve essere letta senza considerare valori specifici nell'istruzione . Ad esempio, se un'istruzione contiene WHERE Id = 5
, è possibile leggerla nel formato più generico: WHERE Id = @some_value
SELECT TOP 5 query_stats.query_hash AS Query_Hash,
SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS Avg_CPU_Time,
MIN(query_stats.statement_text) AS Sample_Statement_Text
FROM
(SELECT QS.*,
SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(ST.text)
ELSE QS.statement_end_offset END
- QS.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS QS
CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
GROUP BY query_stats.query_hash
ORDER BY 2 DESC;
B. Restituzione di aggregazioni relative al conteggio delle righe per una query
Nell'esempio seguente vengono restituite le informazioni di aggregazione relative al conteggio delle righe (totale righe, numero minimo righe, numero massimo righe e ultime righe) per le query.
SELECT qs.execution_count,
SUBSTRING(qt.text,qs.statement_start_offset/2 +1,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max), qt.text)) * 2
ELSE qs.statement_end_offset end -
qs.statement_start_offset
)/2
) AS query_text,
qt.dbid, dbname= DB_NAME (qt.dbid), qt.objectid,
qs.total_rows, qs.last_rows, qs.min_rows, qs.max_rows
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE qt.text like '%SELECT%'
ORDER BY qs.execution_count DESC;
Vedi anche
Funzioni e viste a gestione dinamica relative all'esecuzione (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_exec_query_plan (Transact-SQL)
sys.dm_exec_procedure_stats (Transact-SQL)
sys.dm_exec_trigger_stats (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)