Condividi tramite


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.

In database SQL obiettivi di servizio Basic, S0 e S1 e per i database nei pool elastici, è necessario l'account amministratore del server, l'account amministratore di Microsoft Entra o l'appartenenza al ruolo del ##MS_ServerStateReader## 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)