Partilhar via


sys.dm_exec_query_profiles (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Monitoriza o progresso da consulta em tempo real enquanto a consulta está em execução. Por exemplo, use este DMV para determinar qual a parte da consulta que está a decorrer. Ligue este DMV a outros DMVs do sistema usando as colunas identificadas no campo de descrição. Ou, junte este DMV a outros contadores de desempenho (como Performance Monitor, xperf) usando as colunas de carimbo temporal.

Tabela retornada

Os contadores devolvidos são por operador por thread. Os resultados são dinâmicos e não correspondem aos resultados das opções existentes, como SET STATISTICS XML ON as que só criam saída quando a consulta termina.

Nome da coluna Tipo de dados Description
identificador_de_sessão smallint Identifica a sessão em que esta consulta é executada. Referências dm_exec_sessions.session_id.
id_de_pedido int Identifica o pedido alvo. Referências dm_exec_sessions.request_id.
sql_handle varbinary(64) É um token que identifica de forma única o batch ou procedimento armazenado do qual a consulta faz parte. Referências dm_exec_query_stats.sql_handle.
plan_handle varbinary(64) É um token que identifica de forma única um plano de execução de consulta para um lote que foi executado e cujo plano reside na cache do plano, ou que está atualmente a ser executado. Referências dm_exec_query_stats.plan_handle.
physical_operator_name nvarchar(256) Nome do operador físico.
node_id int Identifica um nó operador na árvore de consultas.
thread_id int Distingue os threads (para uma consulta paralela) pertencentes ao mesmo nó operador de consulta.
endereço da tarefa varbinary(8) Identifica a tarefa SQLOS que este thread está a usar. Referências dm_os_tasks.endereço_tarefa.
row_count bigint Número de linhas devolvidas pelo operador até agora.
rewind_count bigint Número de retrocessos até agora.
rebind_count bigint Número de rebinds até agora.
end_of_scan_count bigint Número de exames finais até agora.
estimate_row_count bigint Número estimado de linhas. Pode ser útil comparar estimated_row_count com a row_count real.
first_active_time bigint O tempo, em milissegundos, quando o operador foi chamado pela primeira vez.
last_active_time bigint A hora, em milissegundos, em que o operador foi chamado pela última vez.
open_time bigint Carimbo temporal quando aberto (em milissegundos).
first_row_time bigint Carimbo temporal em que a primeira fila foi aberta (em milissegundos).
last_row_time bigint Carimbo temporal em que a última linha foi aberta (em milissegundos).
close_time bigint Carimbo temporal quando estiver perto (em milissegundos).
elapsed_time_ms bigint Tempo total decorrido (em milissegundos) utilizado pelas operações do nó alvo até então.
cpu_time_ms bigint O tempo total de utilização da CPU (em milissegundos) pelas operações do nó alvo até agora.
database_id smallint ID da base de dados que contém o objeto sobre o qual as leituras e escritas estão a ser realizadas.
object_id int O identificador do objeto sobre o qual as leituras e escritas estão a ser realizadas. Referências sys.objects.object_id.
index_id int O índice (se houver) contra o qual o conjunto de linhas é aberto.
scan_count bigint Número de digitalizações de tabelas/índices até agora.
logical_read_count bigint Número de leituras lógicas até agora.
physical_read_count bigint Número de leituras físicas até agora.
read_ahead_count bigint Número de leituras antecipadas até agora.
write_page_count bigint Número de páginas escritas até agora devido a derrames.
lob_logical_read_count bigint Número de leituras lógicas LOB até agora.
lob_physical_read_count bigint Número de leituras físicas LOB até agora.
lob_read_ahead_count bigint Número de leituras LOB até agora.
segment_read_count int Número de leituras antecipadas de segmentos até agora.
segment_skip_count int Número de segmentos saltados até agora.
actual_read_row_count bigint Número de linhas lidas por um operador antes de o predicado residual ser aplicado.
estimated_read_row_count bigint Aplica-se a: A partir do SQL Server 2016 (13.x) SP1.
Número de linhas estimadas a serem lidas por um operador antes de o predicado residual ser aplicado.

Observações gerais

Se o nó do plano de consulta não tiver qualquer E/S, todos os contadores relacionados com E/S são definidos como NULL.

Os contadores relacionados com I/O reportados por este IMT são mais detalhados do que os reportados SET STATISTICS IO das seguintes duas formas:

  • SET STATISTICS IO agrupa os marcadores de todas as E/S de uma dada tabela. Com este DMV, terá contadores separados para cada nó no plano de consulta que realiza I/O para a tabela.

  • Se houver uma varredura paralela, este IMT reporta contadores para cada uma das linhas paralelas que trabalham na varredura.

A partir do SQL Server 2016 (13.x) SP1, a infraestrutura padrão de perfil de estatísticas de execução de consultas existe lado a lado com uma infraestrutura leve de perfilagem de estatísticas de execução de consultas. SET STATISTICS XML ON e SET STATISTICS PROFILE ON usar sempre a infraestrutura padrão de perfil de estatísticas de execução de consultas. Para sys.dm_exec_query_profiles ser preenchido, uma das infraestruturas de perfil de consultas deve estar ativada. Para obter mais informações, consulte a infraestrutura de perfilamento de consultas .

Observação

A consulta em investigação tem de começar depois de a infraestrutura de perfil de consultas estar ativada; ativar após o início da consulta não produzirá resultados em sys.dm_exec_query_profiles. Para mais informações sobre como ativar as infraestruturas de perfilagem de consultas, consulte Infraestrutura de Perfilamento de Consultas.

Permissions

  • No SQL Server e Azure SQL Managed Instance, requer VIEW DATABASE STATE permissão e pertença ao papel de db_owner base de dados.
  • No Azure SQL Database Premium Tiers, requer a VIEW DATABASE STATE permissão na base de dados.
  • Nos objetivos de serviço Azure SQL Database Basic, S0 e S1, e para bases de dados em pools elásticos, é necessária a conta de administrador do servidor ou a conta de administrador Microsoft Entra . Em todos os outros objetivos de serviço de base de dados SQL, a VIEW DATABASE STATE permissão é necessária na base de dados.

Permissões para SQL Server 2022 e posterior

Requer a permissão VIEW DATABASE PERFORMANCE STATE no banco de dados.

Examples

Passo 1: Inicie sessão numa sessão em que planeia executar a consulta que irá analisar com sys.dm_exec_query_profiles. Para configurar a consulta para perfil, use SET STATISTICS PROFILE ON. Executa a tua consulta nesta mesma sessão.

--Configure query for profiling with sys.dm_exec_query_profiles  
SET STATISTICS PROFILE ON;  
GO  

--Or enable query profiling globally under SQL Server 2016 SP1 or above (not needed in SQL Server 2019)  
DBCC TRACEON (7412, -1);  
GO 
  
--Next, run your query in this session, or in any other session if query profiling has been enabled globally 

Passo 2: Inicie sessão numa segunda sessão diferente da sessão em que a sua consulta está a ser executada.

A seguinte declaração resume o progresso alcançado pela consulta atualmente a decorrer na sessão 54. Para isso, calcula o número total de linhas de saída de todos os threads para cada nó e compara-o com o número estimado de linhas de saída para esse nó.

--Run this in a different session than the session in which your query is running. 
--Note that you may need to change session id 54 below with the session id you want to monitor.
SELECT node_id,physical_operator_name, SUM(row_count) row_count, 
  SUM(estimate_row_count) AS estimate_row_count, 
  CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)  
FROM sys.dm_exec_query_profiles   
WHERE session_id=54
GROUP BY node_id,physical_operator_name  
ORDER BY node_id;  

Ver também

Visualizações e funções de gerenciamento dinâmico (Transact-SQL)
Visualizações e funções de gerenciamento dinâmico relacionadas à execução (Transact-SQL)