sys.dm_exec_query_stats (Transact-SQL)
Retorna estatísticas de desempenho agregado dos planos de consulta em cache. 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 |
---|
Uma consulta inicial de sys.dm_exec_query_stats pode produzir resultados inexatos se houver uma carga de trabalho atualmente em execução no servidor. Mais resultados precisos podem ser determinados pela reexecução da consulta. |
Nome da coluna |
Tipo de dados |
Descrição |
---|---|---|
sql_handle |
varbinary(64) |
É um token que se refere ao lote ou procedimento armazenado de que 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. Um valor de -1 indica o fim do lote. |
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 se refere ao plano compilado de que a consulta faz parte. Este valor pode ser transmitido à função de gerenciamento dinâmico sys.dm_exec_query_plan para a obtenção do plano de consulta. |
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. |
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. |
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. |
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. |
total_physical_reads |
bigint |
Número total de leituras físicas efetuadas por execuções deste plano desde sua compilação. |
last_physical_reads |
bigint |
Número de leituras físicas efetuadas na última vez em que o plano foi executado. |
min_physical_reads |
bigint |
Número mínimo de leituras físicas que este plano efetuou durante uma única execução. |
max_physical_reads |
bigint |
Número máximo de leituras físicas que este plano efetuou durante uma única execução. |
total_logical_writes |
bigint |
Número total de gravações lógicas efetuadas por execuções deste plano desde sua compilação. |
last_logical_writes |
bigint |
Número de gravações lógicas efetuadas na última vez em que o plano foi executado. |
min_logical_writes |
bigint |
Número mínimo de gravações lógicas que este plano efetuou durante uma única execução. |
max_logical_writes |
bigint |
Número máximo de gravações lógicas que este plano efetuou durante uma única execução. |
total_logical_reads |
bigint |
Número total de leituras lógicas efetuadas por execuções deste plano desde sua compilação. |
last_logical_reads |
bigint |
Número de leituras lógicas efetuadas na última vez em que o plano foi executado. |
min_logical_reads |
bigint |
Número mínimo de leituras lógicas que este plano efetuou durante uma única execução. |
max_logical_reads |
bigint |
Número máximo de leituras lógicas que este plano efetuou durante uma única execução. |
total_clr_time |
bigint |
O tempo, relatado em microssegundos (mas preciso somente em milissegundos), consumido dentro de objetos CLR (Common Language Runtime) Microsoft .NET Framework por execuções desse plano desde sua compilação. Os objetos CLR podem ser procedimentos armazenados, funções, disparadores, tipos e agregados. |
last_clr_time |
bigint |
Tempo, relatado em microssegundos (mas preciso somente 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, disparadores, tipos e agregados. |
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, disparadores, tipos e agregados. |
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, disparadores, tipos e agregados. |
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 agregado usado para consultas que são diferentes apenas nos valores literais. Para obter mais informações, consulte Localizando e ajustando consultas semelhantes usando consulta e hashes de plano de consulta. |
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. Para obter mais informações, consulte Localizando e ajustando consultas semelhantes usando consulta e hashes de plano de consulta. |
total_rows |
bigint |
O número total de linhas retornadas pela consulta. Não pode ser nulo. |
last_rows |
bigint |
O número total de linhas retornadas pela última execução da consulta. Não pode ser nulo. |
min_rows |
bigint |
O número mínimo de linhas retornadas pela consulta no número de vezes em que o plano foi executado desde sua última compilação. Não pode ser nulo. |
max_rows |
bigint |
O número máximo de linhas retornadas pela consulta no número de vezes em que o plano foi executado desde sua última compilação. Não pode ser nulo. |
Permissões
Requer a permissão VIEW SERVER STATE no servidor.
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 por tempo médio de CPU. Este exemplo agrega as consultas de acordo com o hash de consulta delas, portanto as consultas equivalentes lógicas são agrupadas por seu consumo de recurso cumulativo.
USE AdventureWorks2008R2;
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;
GO
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;