sys.dm_exec_query_stats (Transact-SQL)

Aplica-se a: simSQL Server (todas as versões compatíveis) SimBanco de Dados SQL do Azure

Retorna estatísticas de desempenho de agregação de planos de consulta em cache no SQL Server. A exibição contém uma linha por instrução de consulta dentro do plano em cache e o tempo de vida das linhas é ligado ao próprio plano. Quando um plano é removido do cache, as linhas correspondentes são eliminadas desta exibição.

Observação

  • Os resultados de Sys.dm_exec_query_stats podem variar com cada execução, já que os dados refletem apenas as consultas concluídas e não os que ainda estão em andamento.
  • para chamá-lo do pool de SQL dedicado no Azure Synapse Analytics ou PDW (Analytics Platform System) , use o nome sys.dm_pdw_nodes_exec_query_stats. para uso do pool de SQL sem servidor sys.dm_exec_query_stats.
Nome da coluna Tipo de dados Descrição
sql_handle varbinary(64) É um token que identifica exclusivamente o lote ou o procedimento armazenado do qual a consulta faz parte.

Pode ser usado sql_handle, junto com statement_start_offset e statement_end_offset, para recuperar o texto SQL da consulta, chamando a função de gerenciamento dinâmico sys.dm_exec_sql_text.
statement_start_offset int Indica, em bytes, começando com 0, a posição inicial da consulta que a linha descreve dentro do texto de seu lote ou objeto persistente.
statement_end_offset int Indica, em bytes, começando com 0, a posição final da consulta que a linha descreve dentro do texto de seu lote ou objeto persistente. Para versões anteriores SQL Server 2014 (12.x) , um valor de-1 indica o final do lote. Comentários à direita não são mais incluídos.
plan_generation_num bigint Um número de sequência que pode ser usado para distinguir entre instâncias de planos após uma recompilação.
plan_handle varbinary(64) É um token que identifica exclusivamente um plano de execução de consulta para um lote que foi executado e seu plano reside no cache de planos ou está em execução no momento. Este valor pode ser transmitido à função de gerenciamento dinâmico sys.dm_exec_query_plan para a obtenção do plano de consulta.

Sempre será 0x000 quando um procedimento armazenado compilado nativamente consultar uma tabela com otimização de memória.
creation_time datetime Hora em que o plano foi compilado.
last_execution_time datetime Hora do início da execução do plano.
execution_count bigint Número de vezes que o plano foi executado desde sua última compilação.
total_worker_time bigint Tempo total da CPU, relatado em microssegundos (mas preciso somente em milissegundos), que foi consumido pelas execuções desse plano desde que foi compilado.

Para procedimentos armazenados compilados de modo nativo, o total_worker_time pode não ser preciso se várias execuções levarem menos de 1 milissegundo.
last_worker_time bigint Tempo de CPU, relatado em microssegundos (mas preciso somente em milissegundos), consumido na última vez em que o plano foi executado. 1
min_worker_time bigint Tempo de CPU mínimo, relatado em microssegundos (mas preciso somente em milissegundos), que esse plano já consumiu durante uma única execução. 1
max_worker_time bigint Tempo de CPU máximo, relatado em microssegundos (mas preciso somente em milissegundos), que esse plano já consumiu durante uma única execução. 1
total_physical_reads bigint Número total de leituras físicas efetuadas por execuções deste plano desde sua compilação.

Sempre será 0 ao consultar uma tabela com otimização de memória.
last_physical_reads bigint Número de leituras físicas efetuadas na última vez em que o plano foi executado.

Sempre será 0 ao consultar uma tabela com otimização de memória.
min_physical_reads bigint Número mínimo de leituras físicas que este plano efetuou durante uma única execução.

Sempre será 0 ao consultar uma tabela com otimização de memória.
max_physical_reads bigint Número máximo de leituras físicas que este plano efetuou durante uma única execução.

Sempre será 0 ao consultar uma tabela com otimização de memória.
total_logical_writes bigint Número total de gravações lógicas efetuadas por execuções deste plano desde sua compilação.

Sempre será 0 ao consultar uma tabela com otimização de memória.
last_logical_writes bigint Número de páginas do pool de buffers sujos durante a execução concluída mais recentemente do plano.

Depois que uma página é lida, a página se torna suja somente na primeira vez que ela é modificada. Quando uma página é suja, esse número é incrementado. As modificações subsequentes de uma página já suja não afetam esse número.

Esse número será sempre 0 ao consultar uma tabela com otimização de memória.
min_logical_writes bigint Número mínimo de gravações lógicas que este plano efetuou durante uma única execução.

Sempre será 0 ao consultar uma tabela com otimização de memória.
max_logical_writes bigint Número máximo de gravações lógicas que este plano efetuou durante uma única execução.

Sempre será 0 ao consultar uma tabela com otimização de memória.
total_logical_reads bigint Número total de leituras lógicas efetuadas por execuções deste plano desde sua compilação.

Sempre será 0 ao consultar uma tabela com otimização de memória.
last_logical_reads bigint Número de leituras lógicas efetuadas na última vez em que o plano foi executado.

Sempre será 0 ao consultar uma tabela com otimização de memória.
min_logical_reads bigint Número mínimo de leituras lógicas que este plano efetuou durante uma única execução.

Sempre será 0 ao consultar uma tabela com otimização de memória.
max_logical_reads bigint Número máximo de leituras lógicas que este plano efetuou durante uma única execução.

Sempre será 0 ao consultar uma tabela com otimização de memória.
total_clr_time bigint Tempo, relatado em microssegundos (mas preciso apenas para milissegundos), consumido dentro de objetos Microsoft CLR (Common Language Runtime) por execuções desse plano desde que ele .NET Framework foi compilado. Os objetos CLR podem ser procedimentos armazenados, funções, gatilhos, tipos e agregações.
last_clr_time bigint Tempo, relatado em microssegundos (mas só preciso em milissegundos), consumido pela execução dentro de objetos CLR .NET Framework durante a última execução desse plano. Os objetos CLR podem ser procedimentos armazenados, funções, gatilhos, tipos e agregações.
min_clr_time bigint Tempo mínimo, relatado em microssegundos (mas preciso somente em milissegundos), que esse plano já consumiu dentro de objetos CLR .NET Framework durante uma única execução. Os objetos CLR podem ser procedimentos armazenados, funções, gatilhos, tipos e agregações.
max_clr_time bigint Tempo máximo, relatado em microssegundos (mas preciso somente em milissegundos), que esse plano já consumiu dentro de CLR .NET Framework durante uma única execução. Os objetos CLR podem ser procedimentos armazenados, funções, gatilhos, tipos e agregações.
total_elapsed_time bigint Tempo total decorrido, relatado em microssegundos (mas preciso somente em milissegundos), para execuções concluídas desse plano.
last_elapsed_time bigint Tempo decorrido, relatado em microssegundos (mas preciso somente em milissegundos), para a execução completa mais recente desse plano.
min_elapsed_time bigint Tempo decorrido mínimo, relatado em microssegundos (mas preciso somente em milissegundos), para qualquer execução concluída desse plano.
max_elapsed_time bigint Tempo decorrido máximo, relatado em microssegundos (mas preciso somente em milissegundos), para qualquer execução concluída desse plano.
query_hash Binary(8) Valor de hash binário calculado na consulta e usado para identificar consultas com lógica semelhante. Você pode usar o hash de consulta para determinar o recurso de agregação usado para consultas que são diferentes apenas nos valores literais.
query_plan_hash binary(8) Valor de hash binário calculado no plano de execução de consulta e usado para identificar planos de execução de consulta semelhantes. Você pode usar o hash de plano de consulta para localizar o custo cumulativo de consultas com planos de execução semelhantes.

Sempre será 0x000 quando um procedimento armazenado compilado nativamente consultar uma tabela com otimização de memória.
total_rows bigint O número total de linhas retornadas pela consulta. Não pode ser nulo.

Sempre será 0 quando um procedimento armazenado compilado nativamente consultar uma tabela com otimização de memória.
last_rows bigint O número total de linhas retornadas pela última execução da consulta. Não pode ser nulo.

Sempre será 0 quando um procedimento armazenado compilado nativamente consultar uma tabela com otimização de memória.
min_rows bigint Número mínimo de linhas retornadas pela consulta durante uma execução. Não pode ser nulo.

Sempre será 0 quando um procedimento armazenado compilado nativamente consultar uma tabela com otimização de memória.
max_rows bigint Número máximo de linhas retornadas pela consulta durante uma execução. Não pode ser nulo.

Sempre será 0 quando um procedimento armazenado compilado nativamente consultar uma tabela com otimização de memória.
statement_sql_handle varbinary(64) Aplica-se a: SQL Server 2014 (12.x) e posterior.

Populado com valores não NULL somente se Repositório de Consultas estiver ligado e coletando as estatísticas para essa consulta específica.
statement_context_id bigint Aplica-se a: SQL Server 2014 (12.x) e posterior.

Populado com valores não NULL somente se Repositório de Consultas estiver ligado e coletando as estatísticas para essa consulta específica.
total_dop bigint A soma total do grau de paralelismo que esse plano usou desde que foi compilado. Sempre será 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
last_dop bigint O grau de paralelismo quando esse plano foi executado pela última vez. Sempre será 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
min_dop bigint O grau mínimo de paralelismo que esse plano já usou durante uma execução. Sempre será 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
Max_dop bigint O grau máximo de paralelismo que esse plano já usou durante uma execução. Sempre será 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
total_grant_kb bigint A quantidade total de concessão de memória reservada em KB que esse plano recebeu desde que foi compilado. Sempre será 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
last_grant_kb bigint A quantidade de concessão de memória reservada em KB quando este plano foi executado pela última vez. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
min_grant_kb bigint A quantidade mínima de concessão de memória reservada em KB que esse plano já recebeu durante uma execução. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
max_grant_kb bigint A quantidade máxima de concessão de memória reservada em KB que esse plano já recebeu durante uma execução. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
total_used_grant_kb bigint A quantidade total de concessão de memória reservada em KB que este plano usou desde que foi compilado. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
last_used_grant_kb bigint A quantidade de concessão de memória usada em KB quando este plano foi executado pela última vez. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
min_used_grant_kb bigint A quantidade mínima de concessão de memória usada em KB que esse plano já usou durante uma execução. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
max_used_grant_kb bigint A quantidade máxima de concessão de memória usada em KB que esse plano já usou durante uma execução. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
total_ideal_grant_kb bigint A quantidade total de concessão de memória ideal em KB que este plano estimou desde que foi compilado. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
last_ideal_grant_kb bigint A quantidade de concessão de memória ideal em KB quando este plano foi executado pela última vez. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
min_ideal_grant_kb bigint A quantidade mínima de concessão de memória ideal em KB que esse plano já estimou durante uma execução. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
max_ideal_grant_kb bigint A quantidade máxima de concessão de memória ideal em KB que esse plano já estimou durante uma execução. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
total_reserved_threads bigint A soma total de threads paralelos reservados que esse plano já usou desde que foi compilado. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
last_reserved_threads bigint O número de threads paralelos reservados quando este plano foi executado pela última vez. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
min_reserved_threads bigint O número mínimo de threads paralelos reservados que esse plano já usou durante uma execução. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
max_reserved_threads bigint O número máximo de threads paralelos reservados que esse plano já usou durante uma execução. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
total_used_threads bigint A soma total de threads paralelos usados que este plano já usou desde que foi compilado. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
last_used_threads bigint O número de threads paralelos usados quando este plano foi executado pela última vez. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
min_used_threads bigint O número mínimo de threads paralelos usados que esse plano já usou durante uma execução. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
max_used_threads bigint O número máximo de threads paralelos usados que esse plano já usou durante uma execução. Será sempre 0 para consultar uma tabela com otimização de memória.

Aplica-se a: SQL Server 2016 (13.x) e posterior.
total_columnstore_segment_reads bigint A soma total de segmentos columnstore lidos pela consulta. Não pode ser nulo.

Aplica-se a: a partir do SQL Server 2016 (13.x) SP2 e do SQL Server 2017 (14.x) Cu3
last_columnstore_segment_reads bigint O número de segmentos columnstore lidos pela última execução da consulta. Não pode ser nulo.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
min_columnstore_segment_reads bigint O número mínimo de segmentos columnstore já lidos pela consulta durante uma execução. Não pode ser nulo.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
max_columnstore_segment_reads bigint O número máximo de segmentos columnstore já lidos pela consulta durante uma execução. Não pode ser nulo.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
total_columnstore_segment_skips bigint A soma total de segmentos columnstore ignorados pela consulta. Não pode ser nulo.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
last_columnstore_segment_skips bigint O número de segmentos columnstore ignorados pela última execução da consulta. Não pode ser nulo.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
min_columnstore_segment_skips bigint O número mínimo de segmentos columnstore já ignorados pela consulta durante uma execução. Não pode ser nulo.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
max_columnstore_segment_skips bigint O número máximo de segmentos columnstore já ignorados pela consulta durante uma execução. Não pode ser nulo.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
total_spills bigint O número total de páginas depuradas pela execução dessa consulta desde que ela foi compilada.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
last_spills bigint O número de páginas que foram refeitas na última vez em que a consulta foi executada.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
min_spills bigint O número mínimo de páginas que essa consulta já foi desfeita durante uma única execução.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
max_spills bigint O número máximo de páginas que essa consulta já foi desfeita durante uma única execução.

Aplica-se a: começando com SQL Server 2016 (13.x) SP2 e SQL Server 2017 (14.x) CU3
pdw_node_id int O identificador do nó em que essa distribuição está.

Aplica-se a: Azure Synapse Analytics , PDW (Analytics Platform System)
total_page_server_reads bigint Número total de leituras de servidor de página remota executadas por execuções desse plano desde que ele foi compilado.

Aplica-se a: Banco de Dados SQL do Azure Hiperescala
last_page_server_reads bigint Número de leituras de servidor de página remota executadas na última vez em que o plano foi executado.

Aplica-se a: Banco de Dados SQL do Azure Hiperescala
min_page_server_reads bigint Número mínimo de leituras de servidor de página remota que esse plano já realizou durante uma única execução.

Aplica-se a: Banco de Dados SQL do Azure Hiperescala
max_page_server_reads bigint Número máximo de leituras de servidor de página remota que esse plano já realizou durante uma única execução.

Aplica-se a: Banco de Dados SQL do Azure Hiperescala

Observação

1 Para procedimentos armazenados compilados na verdade quando a coleta de estatísticas está habilitada, o tempo de trabalho é coletado em milissegundos. Se a consulta for executada em menos de um milissegundo, o valor será 0.

Permissões

Em SQL Server e SQL Instância Gerenciada, requer VIEW SERVER STATE permissão.

Em Banco de Dados SQL de serviço Básico, S0 e S1 e para bancos de dados em pools elásticos, a conta de administrador do servidor, Azure Active Directory conta de administrador do Azure Active Directory ou associação na função de servidor é ##MS_ServerStateReader## necessária. Em todos os outros Banco de Dados SQL de serviço, a permissão no banco de dados ou a associação na VIEW DATABASE STATE função de servidor é ##MS_ServerStateReader## necessária.

Comentários

As estatísticas na exibição são atualizadas quando uma consulta é concluída.

Exemplos

a. Localizando as consultas TOP N

O exemplo a seguir retorna informações sobre as cinco principais consultas classificadas pelo tempo médio de CPU. Este exemplo agrega as consultas de acordo com o hash de consulta para que as consultas logicamente equivalentes sejam agrupadas pelo respectivo consumo de recursos cumulativo.

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. Retornando agregações de contagem de linhas para uma consulta

O exemplo a seguir retorna informações de agregações de contagem de linhas (total de linhas, mínimo de linhas, máximo de linhas e últimas linhas) para consultas.

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;  

Confira também

Exibições e funções de gerenciamento dinâmico relacionadas à execução (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)