Partilhar via


sys.dm_exec_requests (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)ponto de extremidade de análise SQL no Microsoft FabricWarehouse no Microsoft Fabric

Devolve informações sobre cada pedido que está a ser executado no SQL Server. Para obter mais informações sobre solicitações, consulte o Guia de arquitetura de threads e tarefas.

Observação

Para chamar isso do pool SQL dedicado no Azure Synapse Analytics ou no Analytics Platform System (PDW), consulte sys.dm_pdw_exec_requests. Para pool SQL sem servidor ou Microsoft Fabric, use sys.dm_exec_requestso .

Nome da coluna Tipo de dados Descrição
session_id smallint ID da sessão à qual este pedido está relacionado. Não anulável.
request_id int ID do pedido. Único no contexto da sessão. Não anulável.
start_time data e hora Carimbo de data/hora quando a solicitação chegou. Não anulável.
status nvarchar(30) Estado do pedido. Pode ser um dos seguintes valores:

Contexto geral
reversão
a correr
executável
dormir
suspenso

Não anulável.
command nvarchar(32) Identifica o tipo atual de comando que está sendo processado. Os tipos de comando comuns incluem os seguintes valores:

SELECIONAR
INSERIR
ATUALIZAÇÃO
SUPRIMIR
BACKUP LOG
BANCO DE DADOS DE BACKUP
DBCC
PARA

O texto do pedido pode ser recuperado utilizando sys.dm_exec_sql_text com o correspondente sql_handle para o pedido. Os processos internos do sistema definem o comando com base no tipo de tarefa que executam. As tarefas podem incluir os seguintes valores:

MONITOR DE BLOQUEIO
CHECKPOINTPREGUIÇOSO
ESCRITOR

Não anulável.
sql_handle varbinário(64) Um token que identifica exclusivamente o lote ou o procedimento armazenado do qual a consulta faz parte. Nulo.
statement_start_offset int Indica, em bytes, começando com 0, a posição inicial da instrução atualmente em execução para o lote ou objeto persistente em execução no momento. Pode ser usado em conjunto com o sql_handle, o statement_end_offsete a sys.dm_exec_sql_text função de gerenciamento dinâmico para recuperar a instrução atualmente em execução para a solicitação. Nulo.
statement_end_offset int Indica, em bytes, começando com 0, a posição final da instrução atualmente em execução para o lote ou objeto persistente em execução no momento. Pode ser usado em conjunto com o sql_handle, o statement_start_offsete a sys.dm_exec_sql_text função de gerenciamento dinâmico para recuperar a instrução atualmente em execução para a solicitação. Nulo.
plan_handle varbinário(64) Um token que identifica exclusivamente um plano de execução de consulta para um lote que está sendo executado no momento. Nulo.
database_id smallint ID do banco de dados contra o qual a solicitação está sendo executada. Não anulável.

No Banco de Dados SQL do Azure, os valores são exclusivos em um único banco de dados ou pool elástico, mas não em um servidor lógico.
user_id int ID do usuário que enviou a solicitação. Não anulável.
connection_id identificador único ID da conexão na qual a solicitação chegou. Nulo.
blocking_session_id smallint ID da sessão que está bloqueando a solicitação. Se esta coluna for NULL ou 0, a solicitação não estiver bloqueada ou as informações da sessão de bloqueio não estiverem disponíveis (ou não puderem ser identificadas). Para obter mais informações, consulte Compreender e resolver problemas de bloqueio do SQL Server.

-2 = O recurso de bloqueio pertence a uma transação distribuída órfã.

-3 = O recurso de bloqueio pertence a uma transação de recuperação diferida.

-4 = session_id do proprietário da trava de bloqueio não pôde ser determinado neste momento devido a transições internas do estado da trava.

-5 = session_id do proprietário da trava de bloqueio não pôde ser determinado porque não é rastreado para esse tipo de trava (por exemplo, para uma trava SH).

Por si só, blocking_session_id-5 não indica um problema de desempenho. -5 é uma indicação de que a sessão está aguardando a conclusão de uma ação assíncrona. Antes -5 de ser introduzida, a mesma sessão teria mostrado blocking_session_id0, embora ainda estivesse em estado de espera.

Dependendo da carga de trabalho, a observação blocking_session_id = -5 pode ser uma ocorrência comum.
wait_type nvarchar(60) Se a solicitação estiver bloqueada no momento, esta coluna retornará o tipo de espera. Nulo.

Para obter informações sobre tipos de espera, consulte sys.dm_os_wait_stats.
wait_time int Se a solicitação estiver bloqueada no momento, esta coluna retornará a duração, em milissegundos, da espera atual. Não anulável.
last_wait_type nvarchar(60) Se essa solicitação tiver sido bloqueada anteriormente, esta coluna retornará o tipo da última espera. Não anulável.
wait_resource nvarchar(256) Se a solicitação estiver bloqueada no momento, esta coluna retornará o recurso para o qual a solicitação está aguardando no momento. Não anulável.
open_transaction_count int Número de transações que estão abertas para esta solicitação. Não anulável.
open_resultset_count int Número de conjuntos de resultados que estão abertos para esta solicitação. Não anulável.
transaction_id bigint ID da transação na qual esta solicitação é executada. Não anulável.
context_info varbinary(128) CONTEXT_INFO valor da sessão. Nulo.
percent_complete real Porcentagem de trabalho concluído para os seguintes comandos:

ALTER INDEX REORGANIZE
AUTO_SHRINK opção com ALTER DATABASE
BACKUP DATABASE
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
DBCC INDEXDEFRAG
DBCC SHRINKDATABASE
DBCC SHRINKFILE
RECOVERY
RESTORE DATABASE
ROLLBACK
TDE ENCRYPTION

Não anulável.
estimated_completion_time bigint Apenas interno. Não anulável.
cpu_time int Tempo da CPU em milissegundos que é usado pela solicitação. Não anulável.
total_elapsed_time int Tempo total decorrido em milissegundos desde que o pedido chegou. Não anulável.
scheduler_id int ID do agendador que está agendando essa solicitação. Nulo.
task_address varbinário(8) Endereço de memória alocado para a tarefa associada a essa solicitação. Nulo.
reads bigint Número de leituras realizadas por esta solicitação. Não anulável.
writes bigint Número de gravações realizadas por esta solicitação. Não anulável.
logical_reads bigint Número de leituras lógicas que foram executadas pela solicitação. Não anulável.
text_size int Configuração TEXTSIZE para esta solicitação. Não anulável.
language nvarchar(128) Configuração de idioma para a solicitação. Nulo.
date_format Nvarchar(3) Configuração DATEFORMAT para a solicitação. Nulo.
date_first smallint Configuração DATEFIRST para o pedido. Não anulável.
quoted_identifier bit 1 = QUOTED_IDENTIFIER está ATIVADO para o pedido. Caso contrário, é 0.

Não anulável.
arithabort bit 1 = A configuração ARITHABORT está ATIVADA para a solicitação. Caso contrário, é 0.

Não anulável.
ansi_null_dflt_on bit 1 = ANSI_NULL_DFLT_ON configuração está ATIVADA para a solicitação. Caso contrário, é 0.

Não anulável.
ansi_defaults bit 1 = ANSI_DEFAULTS configuração está ATIVADA para a solicitação. Caso contrário, é 0.

Não anulável.
ansi_warnings bit 1 = ANSI_WARNINGS configuração está ATIVADA para a solicitação. Caso contrário, é 0.

Não anulável.
ansi_padding bit 1 = ANSI_PADDING configuração está ATIVADA para a solicitação.

Caso contrário, é 0.

Não anulável.
ansi_nulls bit 1 = ANSI_NULLS configuração está ATIVADA para a solicitação. Caso contrário, é 0.

Não anulável.
concat_null_yields_null bit 1 = CONCAT_NULL_YIELDS_NULL configuração está ATIVADA para a solicitação. Caso contrário, é 0.

Não anulável.
transaction_isolation_level smallint Nível de isolamento com o qual a transação para esta solicitação é criada. Não anulável.
0 = Não especificado
1 = ReadUncommitted
2 = ReadCommitted
3 = Repetível
4 = Serializável
5 = Instantâneo
lock_timeout int Bloqueie o período de tempo limite em milissegundos para esta solicitação. Não anulável.
deadlock_priority int DEADLOCK_PRIORITY configuração para a solicitação. Não anulável.
row_count bigint Número de linhas que foram devolvidas ao cliente por esta solicitação. Não anulável.
prev_error int Último erro que ocorreu durante a execução do pedido. Não anulável.
nest_level int Nível de aninhamento atual do código que está sendo executado na solicitação. Não anulável.
granted_query_memory int Número de páginas alocadas para a execução de uma consulta na solicitação. Não anulável.
executing_managed_code bit Indica se uma solicitação específica está atualmente executando objetos de Common Language Runtime, como rotinas, tipos e gatilhos. Ele é definido para o tempo integral que um objeto Common Language Runtime está na pilha, mesmo durante a execução de Transact-SQL a partir do Common Language Runtime. Não anulável.
group_id int ID do grupo de carga de trabalho ao qual esta consulta pertence. Não anulável.
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.
statement_sql_handle varbinário(64) Aplica-se a: SQL Server 2014 (12.x) e posterior.

sql_handle da consulta individual.

Esta coluna é NULL se o Repositório de Consultas não estiver habilitado para o banco de dados.
statement_context_id bigint Aplica-se a: SQL Server 2014 (12.x) e posterior.

A chave estrangeira opcional para sys.query_context_settings.

Esta coluna é NULL se o Repositório de Consultas não estiver habilitado para o banco de dados.
dop int Aplica-se a: SQL Server 2016 (13.x) e posterior.

O grau de paralelismo da consulta.
parallel_worker_count int Aplica-se a: SQL Server 2016 (13.x) e posterior.

O número de trabalhadores paralelos reservados, se esta for uma consulta paralela.
external_script_request_id identificador único Aplica-se a: SQL Server 2016 (13.x) e posterior.

O ID de solicitação de script externo associado à solicitação atual.
is_resumable bit Aplica-se a: SQL Server 2017 (14.x) e posterior.

Indica se a solicitação é uma operação de índice retomável.
page_resource binário(8) Aplica-se ao: SQL Server 2019 (15.x)

Uma representação hexadecimal de 8 bytes do recurso de página se a wait_resource coluna contiver uma página. Para obter mais informações, consulte sys.fn_PageResCracker.
page_server_reads bigint Aplica-se a: Hiperescala do Banco de Dados SQL do Azure

Número de leituras do servidor de página realizadas por esta solicitação. Não anulável.
dist_statement_id identificador único Aplica-se a: SQL Server 2022 e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada SQL do Azure, Azure Synapse Analytics (somente pools sem servidor) e Microsoft Fabric

ID exclusivo da declaração para o pedido enviado. Não anulável.

Observações

Para executar código que está fora do SQL Server (por exemplo, procedimentos armazenados estendidos e consultas distribuídas), um thread deve ser executado fora do controle do agendador não preventivo. Para fazer isso, um trabalhador alterna para o modo preventivo. Os valores de tempo retornados por essa exibição de gerenciamento dinâmico não incluem o tempo gasto no modo preventivo.

Ao executar solicitações paralelas no modo de linha, o SQL Server atribui um thread de trabalho para coordenar os threads de trabalho responsáveis pela conclusão de tarefas atribuídas a eles. Neste Detran, apenas o thread do coordenador é visível para a solicitação. As colunas reads, writes, logical_reads, e row_countnão são atualizadas para o thread do coordenador. As colunas wait_type, wait_time, last_wait_type, wait_resource, e granted_query_memory são atualizadas apenas para o thread do coordenador. Para obter mais informações, consulte o Thread e o guia de arquitetura de tarefas.

A wait_resource coluna contém informações semelhantes às resource_descriptiondo sys.dm_tran_locks mas está formatada de forma diferente.

Permissões

Se o usuário tiver VIEW SERVER STATE permissão no servidor, ele verá todas as sessões em execução na instância do SQL Server, caso contrário, o usuário verá apenas a sessão atual. VIEW SERVER STATE não pode ser concedido no Banco de Dados SQL do Azure, portanto, sys.dm_exec_requests está sempre limitado à conexão atual.

Em cenários de grupo de disponibilidade, se a réplica secundária estiver definida como somente intenção de leitura, a conexão com a secundária deverá especificar sua intenção de aplicativo em parâmetros de cadeia de conexão adicionando applicationintent=readonly. Caso contrário, a verificação de acesso não sys.dm_exec_requests será aprovada para bancos de dados no grupo de disponibilidade, mesmo que VIEW SERVER STATE haja permissão.

Para o SQL Server 2022 (16.x) e versões posteriores, sys.dm_exec_requests requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Exemplos

Um. Localizar o texto da consulta para um lote em execução

O exemplo a seguir consulta sys.dm_exec_requests para encontrar a consulta interessante e copiá-la sql_handle da saída.

SELECT * FROM sys.dm_exec_requests;
GO

Em seguida, para obter o texto da instrução, use a função sys.dm_exec_sql_text(sql_handle)copiada sql_handle com o sistema .

SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO

B. Mostrar solicitações ativas

Este exemplo a seguir mostra todas as consultas atualmente em execução no data warehouse do SQL Server, excluindo sua própria sessão (@@SPID). Ele usa CROSS APPLY com sys.dm_exec_sql_text para recuperar o texto completo da consulta para cada solicitação e se junta com sys.dm_exec_sessions para incluir informações do usuário sobre o host. O session_id <> @@SPID filtro garante que você não veja sua própria consulta nos resultados.

SELECT r.session_id,
       r.status,
       r.command,
       r.start_time,
       r.total_elapsed_time / 1000.00 AS elapsed_seconds,
       r.cpu_time / 1000.00 AS cpu_seconds,
       r.reads,
       r.writes,
       r.logical_reads,
       r.row_count,
       s.login_name,
       s.host_name,
       t.text AS query_text
FROM sys.dm_exec_requests AS r
     INNER JOIN sys.dm_exec_sessions AS s
         ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE r.session_id <> @@SPID
ORDER BY r.start_time DESC;

C. Localizar todos os bloqueios que um lote em execução está segurando

O exemplo a seguir consulta sys.dm_exec_requests para encontrar o lote interessante e copiá-lo transaction_id da saída.

SELECT * FROM sys.dm_exec_requests;
GO

Em seguida, para encontrar informações de bloqueio, use o copiado transaction_id com a função sys.dm_tran_locksdo sistema .

SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
    AND request_owner_id = < copied transaction_id >;
GO

D. Localizar todos os pedidos atualmente bloqueados

O exemplo a seguir consulta sys.dm_exec_requests para encontrar informações sobre solicitações bloqueadas.

SELECT session_id,
       status,
       blocking_session_id,
       wait_type,
       wait_time,
       wait_resource,
       transaction_id
FROM sys.dm_exec_requests
WHERE status = N'suspended';
GO

E. Ordenar pedidos existentes por CPU

SELECT [req].[session_id],
    [req].[start_time],
    [req].[cpu_time] AS [cpu_time_ms],
    OBJECT_NAME([ST].[objectid], [ST].[dbid]) AS [ObjectName],
    SUBSTRING(
        REPLACE(
            REPLACE(
                SUBSTRING(
                    [ST].[text], ([req].[statement_start_offset] / 2) + 1,
                    ((CASE [req].[statement_end_offset]
                            WHEN -1 THEN DATALENGTH([ST].[text])
                            ELSE [req].[statement_end_offset]
                        END - [req].[statement_start_offset]
                        ) / 2
                    ) + 1
                ), CHAR(10), ' '
            ), CHAR(13), ' '
        ), 1, 512
    ) AS [statement_text]
FROM
    [sys].[dm_exec_requests] AS [req]
    CROSS APPLY [sys].dm_exec_sql_text([req].[sql_handle]) AS [ST]
ORDER BY
    [req].[cpu_time] DESC;
GO