sys.dm_exec_query_stats (Transact-SQL)
Aplica-se a: SQL ServerBanco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Retorna estatísticas de desempenho agregadas para planos de consulta armazenados 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, pois os dados refletem apenas as consultas concluídas e não as que ainda estão em andamento.
- Para chamar isso do pool de SQL dedicado no Azure Synapse Analytics ou no PDW (Analytics Platform System), use o nome sys.dm_pdw_nodes_exec_query_stats. Para o pool de SQL sem servidor, use 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 de que 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 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 ao SQL Server 2014 (12.x), um valor de -1 indica o fim 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 de um lote que foi executado e o plano reside no cache de 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 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 buffer pool sujas durante a execução concluída mais recentemente 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 será 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 com precisão de milissegundos), consumido dentro de objetos CLR (Common Language Runtime) do Microsoft .NET Framework por execuções desse plano desde que ele 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 com precisão de milissegundos) consumido pela execução dentro de objetos CLR do .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 com precisão de 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 .NET Framework CLR 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 | 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 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 já 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. Preenchido com valores não NULL somente se o Repositório de Consultas estiver ativado e coletando as estatísticas dessa consulta específica. |
statement_context_id | bigint | Aplica-se a: SQL Server 2014 (12.x) e posterior. Preenchido com valores não NULL somente se o Repositório de Consultas estiver ativado e coletando as estatísticas dessa consulta específica. |
total_dop | bigint | A soma total do grau de paralelismo que este plano usou desde que foi compilado. Ele 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 este plano foi executado da última vez. Ele 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 este plano já usou durante uma execução. Ele 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 este plano já usou durante uma execução. Ele 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. Ele 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 esse plano foi executado da última vez. Ele sempre será 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. Ele sempre será 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. Ele sempre será 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. Ele sempre será 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 esse plano foi executado da última vez. Ele sempre será 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 este plano já usou durante uma execução. Ele sempre será 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 este plano já usou durante uma execução. Ele sempre será 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 estimada por esse plano desde que foi compilada. Ele sempre será 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 esse plano foi executado da última vez. Ele sempre será 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 este plano já estimou durante uma execução. Ele sempre será 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. Ele sempre será 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 este plano já usou desde que foi compilado. Ele sempre será 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 esse plano foi executado da última vez. Ele sempre será 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. Ele sempre será 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. Ele sempre será 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. Ele sempre será 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 esse plano foi executado da última vez. Ele sempre será 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. Ele sempre será 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. Ele sempre será 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: 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 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 dos 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 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 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 derramadas 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 derramadas na última vez 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á derramou 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á derramou 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á ativada. Aplica-se a: Azure Synapse Analytics, Analytics Platform System (PDW) |
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: Hiperescala do Banco de Dados SQL do Azure |
last_page_server_reads | bigint | Número de leituras do servidor de página remota executadas na última vez que o plano foi executado. Aplica-se a: Hiperescala do Banco de Dados SQL do Azure |
min_page_server_reads | bigint | Número mínimo de leituras de servidor de página remota que esse plano já executou durante uma única execução. Aplica-se a: Hiperescala do Banco de Dados SQL do Azure |
max_page_server_reads | bigint | Número máximo de leituras de servidor de página remota que esse plano já executou durante uma única execução. Aplica-se 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 de trabalho é coletado em milissegundos. Se a consulta for executada em menos de um milissegundo, o valor será 0.
Permissões
No SQL Server e na Instância Gerenciada de SQL, requer a permissão VIEW SERVER STATE
.
Nos objetivos de serviço Básico, S0 e S1 do Banco de Dados SQL e para bancos de dados em pools elásticos, a conta de administrador do servidor, a conta de administrador do Microsoft Entra ou a ##MS_ServerStateReader##
associação na função de servidor são necessárias. Em todos os outros objetivos de serviço do Banco de Dados SQL, a permissão VIEW DATABASE STATE
no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##
são necessárias.
Permissões do SQL Server 2022 e posteriores
É necessária a permissão VIEW SERVER PERFORMANCE STATE no servidor.
Comentários
As estatísticas na exibição são atualizadas quando uma consulta é concluída.
Exemplos
R. 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. A coluna Sample_Statement_Text mostra um exemplo da estrutura de consulta que corresponde ao hash de consulta, mas deve ser lida sem considerar valores específicos na instrução. Por exemplo, se uma instrução contém 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. 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
Funções e exibiçõ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)