sys.dm_exec_query_stats (Transact-SQL)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure
Retorna estatísticas de desempenho agregadas para planos de consulta armazenados em cache no SQL Server. O modo de exibição contém uma linha por instrução de consulta dentro do plano armazenado em cache e o tempo de vida das linhas está vinculado ao próprio plano. Quando um plano é removido do cache, as linhas correspondentes são eliminadas dessa exibição.
Os resultados do sys.dm_exec_query_stats
podem variar a cada execução, pois os dados refletem apenas consultas concluídas, e não aquelas ainda em andamento.
Para chamar esse DMV de um pool SQL dedicado no Azure Synapse Analytics ou no Analytics Platform System (PDW), use o nome sys.dm_pdw_nodes_exec_query_stats
. Para pool SQL sem servidor, use sys.dm_exec_query_stats
.
Nome da coluna | Tipo de dados | Descrição |
---|---|---|
sql_handle |
varbinário(64) | Um token que identifica exclusivamente o lote ou o procedimento armazenado do qual a consulta faz parte.sql_handle , juntamente com statement_start_offset e statement_end_offset , pode ser usado 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 no 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 no texto de seu lote ou objeto persistente. Para versões anteriores ao SQL Server 2014 (12.x), um valor de -1 indica o fim do lote. Os comentários à direita não estã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 |
varbinário(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 do plano ou está em execução no momento. Esse valor pode ser passado para a função de gerenciamento dinâmico sys.dm_exec_query_plan para obter o plano de consulta. Sempre 0x000 quando um procedimento armazenado compilado nativamente consulta uma tabela com otimização de memória. |
creation_time |
datetime | Momento em que o plano foi elaborado. A hora é registrada no fuso horário atual . |
last_execution_time |
datetime | Última vez em que o plano começou a ser executado. A hora é registrada no fuso horário atual . |
execution_count |
bigint | Número de vezes que o plano foi executado desde a última compilação. |
total_worker_time |
bigint | Quantidade total de tempo de CPU, relatada em microssegundos (mas apenas precisa em milissegundos), que foi consumida pelas execuções deste plano desde que foi compilado. Para procedimentos armazenados compilados nativamente, total_worker_time pode não ser preciso se muitas execuções levarem menos de 1 milissegundo. |
last_worker_time |
bigint | Tempo de CPU, relatado em microssegundos (mas apenas preciso em milissegundos), que foi consumido na última vez que o plano foi executado. 1 |
min_worker_time |
bigint | Tempo mínimo de CPU, relatado em microssegundos (mas apenas preciso em milissegundos), que este plano já consumiu durante uma única execução. 1 |
max_worker_time |
bigint | Tempo máximo de CPU, relatado em microssegundos (mas apenas preciso em milissegundos), que este plano já consumiu durante uma única execução. 1 |
total_physical_reads |
bigint | Número total de leituras físicas realizadas pelas execuções deste plano desde que foi compilado. Sempre 0 ao consultar uma tabela com otimização de memória. |
last_physical_reads |
bigint | Número de leituras físicas realizadas na última vez que o plano foi executado. Sempre 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 já realizou durante uma única execução. Sempre 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 já executou durante uma única execução. Sempre 0 ao consultar uma tabela com otimização de memória. |
total_logical_writes |
bigint | Número total de gravações lógicas realizadas pelas execuções deste plano desde que foi compilado. Sempre 0 ao consultar uma tabela com otimização de memória. |
last_logical_writes |
bigint | Número de páginas do pool de buffers sujas durante a execução mais recente do plano. Depois que uma página é lida, a página fica suja apenas na primeira vez que é modificada. Quando uma página fica suja, esse número é incrementado. Modificações subsequentes de uma página já suja não afetam esse número. Esse número 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 já executou durante uma única execução. Sempre 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 já executou durante uma única execução. Sempre 0 ao consultar uma tabela com otimização de memória. |
total_logical_reads |
bigint | Número total de leituras lógicas realizadas pelas execuções deste plano desde que foi compilado. Sempre 0 ao consultar uma tabela com otimização de memória. |
last_logical_reads |
bigint | Número de leituras lógicas realizadas na última vez que o plano foi executado. Sempre 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 já executou durante uma única execução. Sempre 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 já executou durante uma única execução. Sempre 0 ao consultar uma tabela com otimização de memória. |
total_clr_time |
bigint | Tempo, relatado em microssegundos (mas apenas preciso em milissegundos), consumido dentro de objetos CLR (Common Language Runtime) do Microsoft .NET Framework por execuções deste plano desde que 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 apenas preciso em milissegundos) consumido pela execução dentro de objetos CLR do .NET Framework durante a última execução deste 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 apenas preciso em milissegundos), que esse plano já consumiu dentro de objetos CLR do .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 com precisão de milissegundos), que esse plano já consumiu dentro do CLR do .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, reportado em microssegundos (mas apenas com precisão de milissegundos), para execuções concluídas deste plano. |
last_elapsed_time |
bigint | Tempo decorrido, reportado em microssegundos (mas apenas preciso em milissegundos), para a execução mais recente concluída deste plano. |
min_elapsed_time |
bigint | Tempo mínimo decorrido, reportado em microssegundos (mas apenas com precisão de milissegundos), para qualquer execução concluída deste plano. |
max_elapsed_time |
bigint | Tempo máximo decorrido, reportado em microssegundos (mas apenas com precisão de milissegundos), para qualquer execução concluída deste plano. |
query_hash |
Binário(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 uso de recursos agregados para consultas que diferem apenas por valores literais. |
query_plan_hash |
binário(8) | Valor de hash binário calculado no plano de execução da consulta e usado para identificar planos de execução de consulta semelhantes. Você pode usar o hash do plano de consulta para localizar o custo cumulativo de consultas com planos de execução semelhantes. Sempre 0x000 quando um procedimento armazenado compilado nativamente consulta uma tabela com otimização de memória. |
total_rows |
bigint | Número total de linhas retornadas pela consulta. Não pode ser nulo. Sempre 0 quando um procedimento armazenado compilado nativamente consulta uma tabela com otimização de memória. |
last_rows |
bigint | Número de linhas retornadas pela última execução da consulta. Não pode ser nulo. Sempre 0 quando um procedimento armazenado compilado nativamente consulta uma tabela com otimização de memória. |
min_rows |
bigint | Número mínimo de linhas já retornadas pela consulta durante uma execução. Não pode ser nulo. Sempre 0 quando um procedimento armazenado compilado nativamente consulta uma tabela com otimização de memória. |
max_rows |
bigint | Número máximo de linhas já retornadas pela consulta durante uma execução. Não pode ser nulo. Sempre 0 quando um procedimento armazenado compilado nativamente consulta uma tabela com otimização de memória. |
statement_sql_handle |
varbinário(64) |
Aplica-se a: SQL Server 2014 (12.x) e versões posteriores. Preenchido com valores não NULL somente se o Repositório de Consultas estiver ativado e coletando as estatísticas para essa consulta específica. |
statement_context_id |
bigint |
Aplica-se a: SQL Server 2014 (12.x) e versões posteriores. Preenchido com valores não NULL somente se o Repositório de Consultas estiver ativado e coletando as estatísticas para essa consulta específica. |
total_dop |
bigint | A soma total do grau de paralelismo que este plano utilizou desde que foi compilado. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
last_dop |
bigint | O grau de paralelismo quando este plano foi executado da última vez. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
min_dop |
bigint | O grau mínimo de paralelismo que este plano já utilizou durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
max_dop |
bigint | O grau máximo de paralelismo que este plano já utilizou durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
total_grant_kb |
bigint | A quantidade total de concessão de memória reservada em KB que este plano recebeu desde que foi compilado. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
last_grant_kb |
bigint | A quantidade de concessão de memória reservada em KB quando este plano foi executado pela última vez. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
min_grant_kb |
bigint | A quantidade mínima de concessão de memória reservada em KB que este plano já recebeu durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
max_grant_kb |
bigint | A quantidade máxima de concessão de memória reservada em KB que este plano já recebeu durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
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. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
last_used_grant_kb |
bigint | A quantidade de concessão de memória usada em KB quando este plano foi executado pela última vez. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
min_used_grant_kb |
bigint | A quantidade mínima de concessão de memória usada em KB que este plano já usou durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
max_used_grant_kb |
bigint | A quantidade máxima de concessão de memória usada em KB este plano já usada durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
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. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
last_ideal_grant_kb |
bigint | A quantidade de concessão de memória ideal em KB quando este plano foi executado pela última vez. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
min_ideal_grant_kb |
bigint | A quantidade mínima de concessão de memória ideal em KB que este plano já estimou durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
max_ideal_grant_kb |
bigint | A quantidade máxima de concessão de memória ideal em KB deste plano já estimada durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
total_reserved_threads |
bigint | A soma total de threads paralelos reservados que este plano já usou desde que foi compilado. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
last_reserved_threads |
bigint | O número de threads paralelos reservados quando este plano foi executado pela última vez. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
min_reserved_threads |
bigint | O número mínimo de threads paralelos reservados que este plano já usou durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
max_reserved_threads |
bigint | O número máximo de threads paralelos reservados que este plano já usou durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
total_used_threads |
bigint | A soma total de threads paralelos usados que este plano já usou desde que foi compilado. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
last_used_threads |
bigint | O número de threads paralelos usados quando este plano foi executado pela última vez. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
min_used_threads |
bigint | O número mínimo de threads paralelos usados que este plano já usou durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
max_used_threads |
bigint | O número máximo de threads paralelos usados que este plano já usou durante uma execução. Sempre 0 para consultar uma tabela com otimização de memória.Aplica-se a: SQL Server 2016 (13.x) e versões posteriores. |
total_columnstore_segment_reads |
bigint | A soma total dos segmentos columnstore lidos pela consulta. Não pode ser nulo. Aplica-se ao: Começando com SQL Server 2016 (13.x) SP2 e 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 ao: 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 ao: 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 ao: 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 ao: 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 ao: 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 ao: 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 ao: 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 derramadas pela execução desta consulta desde que foi compilada. Aplica-se ao: 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 derramadas na última vez que a consulta foi executada. Aplica-se ao: 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á vazou durante uma única execução. Aplica-se ao: 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á vazou durante uma única execução. Aplica-se ao: 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 esta distribuição se encontra. Aplica-se a: Azure Synapse Analytics, Analytics Platform System (PDW) |
total_page_server_reads |
bigint | Número total de leituras do servidor de página remoto realizadas pelas execuções deste plano desde que foi compilado. Aplica-se a: Hiperescala do Banco de Dados SQL do Azure |
last_page_server_reads |
bigint | Número de leituras do servidor de página remoto realizadas na última vez que o plano foi executado. se aplica a: Hiperescala do Banco de Dados SQL do Azure |
min_page_server_reads |
bigint | Número mínimo de leituras do servidor de página remoto que este plano já executou durante uma única execução. se aplica a: Hiperescala do Banco de Dados SQL do Azure |
max_page_server_reads |
bigint | Número máximo de leituras do servidor de página remoto que este plano já executou durante uma única execução. se aplica a: Hiperescala do Banco de Dados SQL do Azure |
Observação
1 Para procedimentos armazenados compilados nativamente quando a coleta de estatísticas está habilitada, o tempo do trabalhador é coletado em milissegundos. Se a consulta for executada em menos de um milissegundo, o valor será 0
.
Permissões
O SQL Server 2019 (15.x) e versões anteriores e a Instância Gerenciada SQL do Azure exigem permissão VIEW SERVER STATE
.
O SQL Server 2022 (16.x) e versões posteriores exigem VIEW SERVER PERFORMANCE STATE
permissão no servidor.
No Banco de Dados SQL do Azure VIEW DATABASE STATE
no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##
.
Comentários
As estatísticas no modo de exibição são atualizadas quando uma consulta é concluída.
Exemplos
Um. Encontre as consultas TOP N
O exemplo a seguir retorna informações sobre as cinco principais consultas classificadas pelo tempo médio da CPU. Este exemplo agrega as consultas de acordo com seu hash de consulta para que consultas logicamente equivalentes sejam agrupadas por seu consumo cumulativo de recursos. A coluna Sample_Statement_Text mostra um exemplo da estrutura de consulta que corresponde ao hash da consulta, mas deve ser lida sem considerar valores específicos na instrução. Por exemplo, se uma instrução contiver WHERE Id = 5
, você pode lê-la em sua forma mais genérica: 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. Retornar agregações de contagem de linhas para uma consulta
O exemplo a seguir retorna informações agregadas de contagem de linhas (total de linhas, linhas mínimas, linhas máximas 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;