sys.dm_exec_query_stats (Transact-SQL)
Restituisce dati statistici aggregati sulle prestazioni dei 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
Se sul server è attualmente in esecuzione un carico di lavoro, è possibile che una query iniziale di sys.dm_exec_query_stats generi risultati non accurati. La riesecuzione della query può garantire risultati più accurati.
Si applica a: SQL Server (da SQL Server 2008 alla versione corrente), Database SQL di Azure. |
Nome colonna |
Tipo di dati |
Descrizione |
---|---|---|
sql_handle |
varbinary(64) |
Token che fa riferimento al batch o alla stored procedure di cui fa parte la query. È possibile utilizzare sql_handle, insieme a statement_start_offset e statement_end_offset, per recuperare il testo SQL della query chiamando la funzione a 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, 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 fa riferimento al piano compilato di cui fa parte la query. È possibile passare questo valore alla funzione a 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 con ottimizzazione 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 con ottimizzazione 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 con ottimizzazione 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 con ottimizzazione 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 con ottimizzazione 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 con ottimizzazione per la memoria. |
last_logical_writes |
bigint |
Numero del numero di pagine del pool di buffer diventate dirty durante l'ultima esecuzione del piano. Se una pagina è già dirty (modificata) le scritture non vengono conteggiate. È sempre 0 con esecuzione di query su una tabella con ottimizzazione 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 con ottimizzazione 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 con ottimizzazione 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 con ottimizzazione 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 con ottimizzazione 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 con ottimizzazione 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 con ottimizzazione per la memoria. |
total_clr_time |
bigint |
Tempo, espresso in microsecondi (con precisione al millisecondo), impiegato dalle esecuzioni del piano all'interno di oggetti CLR (Common Language Runtime) Microsoft .NET Framework a partire dalla relativa compilazione. Gli oggetti CLR possono essere stored procedure, funzioni, trigger, tipi e aggregazioni. |
last_clr_time |
bigint |
Tempo, espresso in microsecondi (con precisione al millisecondo), impiegato dall'ultima esecuzione del piano all'interno di oggetti CLR .NET Framework. Gli oggetti CLR possono essere stored procedure, funzioni, trigger, tipi e aggregazioni. |
min_clr_time |
bigint |
Tempo minimo di CPU, espresso in microsecondi (con precisione al millisecondo), mai impiegato dal piano durante una singola esecuzione all'interno di oggetti CLR .NET Framework. Gli oggetti CLR possono essere stored procedure, funzioni, trigger, tipi e aggregazioni. |
max_clr_time |
bigint |
Tempo massimo di CPU, espresso in microsecondi (con precisione al millisecondo), mai impiegato dal piano durante una singola esecuzione all'interno di oggetti CLR .NET Framework. 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 con ottimizzazione 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 con ottimizzazione 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 con ottimizzazione per la memoria. |
min_rows |
bigint |
Numero minimo di righe restituite dalla query rispetto al numero di esecuzioni del piano a partire dall'ultima compilazione. Non può essere Null. È sempre 0 quando una stored procedure compilata in modo nativo esegue una query su una tabella con ottimizzazione per la memoria. |
max_rows |
bigint |
Numero massimo di righe restituite dalla query rispetto al numero di esecuzioni del piano a partire dall'ultima compilazione. Non può essere Null. È sempre 0 quando una stored procedure compilata in modo nativo esegue una query su una tabella con ottimizzazione per la memoria. |
statement_sql_handle |
varbinary(64) |
Si applica a: SQL Server 2014 tramite SQL Server 2014. Riservato per utilizzi futuri. |
statement_context_id |
bigint |
Si applica a: SQL Server 2014 tramite SQL Server 2014. Riservato per utilizzi futuri. |
1 Quando la raccolta delle statistiche è abilitata, per le stored procedure compilate in modo nativo il tempo del processo viene raccolto in millisecondi. Se la query viene eseguita in meno di un millisecondo, il valore sarà 0.
Autorizzazioni
È richiesta l'autorizzazione VIEW SERVER STATE nel server.
Note
Le statistiche nella vista vengono aggiornate quando viene completata una query.
Esempi
A. 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.
USE AdventureWorks2012; GO 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 "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;
Vedere anche
Funzioni e viste a gestione dinamica (Transact-SQL)
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)