sys.dm_exec_requests (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse no Microsoft Fabric
Retorna informações sobre cada solicitação sendo executada no SQL Server. Para obter mais informações sobre solicitações, confira o Guia de arquitetura de threads e tarefas.
Observação
Para chamar isso do pool de SQL dedicado no Azure Synapse Analytics ou no Analytics Platform System (PDW), confira sys.dm_pdw_exec_requests (Transact-SQL). Para o pool de SQL sem servidor ou o Microsoft Fabric, use sys.dm_exec_requests
.
Nome da coluna | Tipo de dados | Descrição |
---|---|---|
session_id |
smallint | ID da sessão a que esta solicitação está relacionada. Não permite valor nulo. |
request_id |
int | ID da solicitação. Exclusiva no contexto da sessão. Não permite valor nulo. |
start_time |
datetime | Carimbo de data e hora em que a solicitação chegou. Não permite valor nulo. |
status |
nvarchar(30) | Status da solicitação. Pode ser um dos seguintes valores: segundo plano rollback executando executável hibernando suspenso Não permite valor nulo. |
command |
nvarchar(32) | Identifica o tipo atual de comando que está sendo processado. Os tipos de comando comuns incluem os seguintes valores: SELECT INSERT UPDATE DELETE BACKUP LOG BACKUP DO BANCO DE DADOS DBCC FOR O texto da solicitação pode ser recuperado usando sys.dm_exec_sql_text com o correspondente sql_handle para a solicitação. Os processos de sistema internos definem o comando com base no tipo de tarefa que eles executam. As tarefas podem incluir os seguintes valores:LOCK MONITOR CHECKPOINTLAZY WRITER Não permite valor nulo. |
sql_handle |
varbinary(64) | É um token que identifica exclusivamente o lote ou o procedimento armazenado de que a consulta faz parte. Anulável. |
statement_start_offset |
int | Indica, em bytes, começando com 0, a posição inicial da instrução em execução para o lote em execução no momento ou o objeto persistente. Pode ser usado junto com sql_handle , statement_end_offset e a função de gerenciamento dinâmico sys.dm_exec_sql_text para recuperar a instrução atualmente em execução para a solicitação. Anulável. |
statement_end_offset |
int | Indica, em bytes, começando com 0, a posição final da instrução em execução para o lote em execução no momento ou o objeto persistente. Pode ser usado junto com sql_handle , statement_start_offset e a função de gerenciamento dinâmico sys.dm_exec_sql_text para recuperar a instrução atualmente em execução para a solicitação. Anulável. |
plan_handle |
varbinary(64) | É um token que identifica exclusivamente um plano de execução de consulta para um lote em execução no momento. Anulável. |
database_id |
smallint | ID do banco de dados no qual a solicitação está em execução. Não permite valor nulo. No Banco de Dados SQL do Azure, os valores são exclusivos em um único banco de dados ou em um 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 permite valor nulo. |
connection_id |
uniqueidentifier | ID da conexão em que a solicitação chegou. Anulável. |
blocking_session_id |
smallint | ID da sessão que está bloqueando a solicitação. Se essa coluna for NULL ou 0 , a solicitação não está bloqueada ou as informações da sessão de bloqueio não estão disponíveis (ou não podem ser identificadas). Para obter mais informações, confira Entender 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 adiada. -4 = session_id do proprietário da trava de bloqueio não pôde ser determinado neste momento devido a transições de estado de trava interna.-5 = session_id do proprietário da trava de bloqueio não pôde ser determinado porque ele 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 de -5 ser introduzido, a mesma sessão teria mostrado blocking_session_id 0 , mesmo que ainda estivesse em um 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, esta coluna retornará o tipo de espera. Anulável. Para obter informações sobre tipos de espera, confira sys.dm_os_wait_stats (Transact-SQL). |
wait_time |
int | Se a solicitação estiver bloqueada, esta coluna retornará a duração, em milissegundos, da espera atual. Não permite valor nulo. |
last_wait_type |
nvarchar(60) | Se esta solicitação tiver sido previamente bloqueada, esta coluna retornará o tipo da última espera. Não permite valor nulo. |
wait_resource |
nvarchar(256) | Se a solicitação estiver bloqueada, esta coluna retornará o recurso pelo qual a solicitação está esperando atualmente. Não permite valor nulo. |
open_transaction_count |
int | Número de transações abertas para esta solicitação. Não permite valor nulo. |
open_resultset_count |
int | Número de conjuntos de resultados abertos para esta solicitação. Não permite valor nulo. |
transaction_id |
bigint | ID da transação na qual esta solicitação é executada. Não permite valor nulo. |
context_info |
varbinary(128) | O valor CONTEXT_INFO da sessão. Anulável. |
percent_complete |
real | Porcentagem de trabalho concluída para os comandos a seguir: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 permite valor nulo. |
estimated_completion_time |
bigint | Somente interno. Não permite valor nulo. |
cpu_time |
int | Tempo da CPU, em milissegundos, usado pela solicitação. Não permite valor nulo. |
total_elapsed_time |
int | Tempo total decorrido em milissegundos desde que a solicitação chegou. Não permite valor nulo. |
scheduler_id |
int | ID do agendador que está programando esta solicitação. Anulável. |
task_address |
varbinary(8) | Endereço de memória alocado à tarefa associada a esta solicitação. Anulável. |
reads |
bigint | Número de leituras executadas por esta solicitação. Não permite valor nulo. |
writes |
bigint | Número de gravações executadas por esta solicitação. Não permite valor nulo. |
logical_reads |
bigint | Número de leituras lógicas executadas pela solicitação. Não permite valor nulo. |
text_size |
int | Configuração TEXTSIZE para esta solicitação. Não permite valor nulo. |
language |
nvarchar(128) | Configuração de idioma para a solicitação. Anulável. |
date_format |
nvarchar(3) | Configuração DATEFORMAT para a solicitação. Anulável. |
date_first |
smallint | Configuração DATEFIRST para a solicitação. Não permite valor nulo. |
quoted_identifier |
bit | 1 = QUOTED_IDENTIFIER é ON para a solicitação. Caso contrário, é 0. Não permite valor nulo. |
arithabort |
bit | 1 = configuração ARITHABORT é ON para a solicitação. Caso contrário, é 0. Não permite valor nulo. |
ansi_null_dflt_on |
bit | 1 = configuração ANSI_NULL_DFLT_ON é ON para a solicitação. Caso contrário, é 0. Não permite valor nulo. |
ansi_defaults |
bit | 1 = configuração ANSI_DEFAULTS é ON para a solicitação. Caso contrário, é 0. Não permite valor nulo. |
ansi_warnings |
bit | 1 = configuração ANSI_WARNINGS é ON para a solicitação. Caso contrário, é 0. Não permite valor nulo. |
ansi_padding |
bit | 1 = configuração ANSI_PADDING é ON para a solicitação. Caso contrário, é 0. Não permite valor nulo. |
ansi_nulls |
bit | 1 = configuração ANSI_NULLS é ON para a solicitação. Caso contrário, é 0. Não permite valor nulo. |
concat_null_yields_null |
bit | 1 = configuração CONCAT_NULL_YIELDS_NULL é ON para a solicitação. Caso contrário, é 0. Não permite valor nulo. |
transaction_isolation_level |
smallint | Nível de isolamento com que a transação desta solicitação é criada. Não permite valor nulo. 0 = Não Especificado 1 = ReadUncommitted 2 = Leitura Confirmada 3 = Repetível 4 = Serializável 5 = Instantâneo |
lock_timeout |
int | Tempo limite de bloqueio em milissegundos desta solicitação. Não permite valor nulo. |
deadlock_priority |
int | Configuração DEADLOCK_PRIORITY da solicitação. Não permite valor nulo. |
row_count |
bigint | Número de linhas que foram retornadas ao cliente por esta solicitação. Não permite valor nulo. |
prev_error |
int | Último erro ocorrido durante a execução da solicitação. Não permite valor nulo. |
nest_level |
int | Nível de aninhamento atual do código sendo executado na solicitação. Não permite valor nulo. |
granted_query_memory |
int | Número de páginas alocadas à execução de uma consulta na solicitação. Não permite valor nulo. |
executing_managed_code |
bit | Indica se uma solicitação específica está atualmente executando objetos de Common Language runtime, como rotinas, tipos e gatilhos. É definida para todo o tempo em que um objeto de Common Language Runtime está na pilha, mesmo durante a execução do Transact-SQL no Common Language Runtime. Não permite valor nulo. |
group_id |
int | ID do grupo de carga de trabalho a que pertence esta consulta. Não permite valor nulo. |
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 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. |
statement_sql_handle |
varbinary(64) | Aplica-se a: SQL Server 2014 (12.x) e posterior.sql_handle da consulta individual.Essa coluna será 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 .Essa coluna será 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 trabalhos paralelos reservados se essa for uma consulta paralela. |
external_script_request_id |
uniqueidentifier | Aplica-se a: SQL Server 2016 (13.x) e posterior. A ID da solicitação de script externa associada à 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 |
binary(8) | Aplica-se a: SQL Server 2019 (15.x) Uma representação hexadecimal em 8 bytes do recurso de página se a coluna wait_resource contiver uma página. Para obter mais informações, confira sys.fn_PageResCracker. |
page_server_reads |
bigint | Aplica-se a: Hiperescala do Banco de Dados SQL do Azure Número de leituras de servidores de páginas executadas por esta solicitação. Não permite valor nulo. |
dist_statement_id |
uniqueidentifier | Aplica-se a: SQL Server 2022 e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Azure Synapse Analytics (somente pools sem servidor) e Microsoft Fabric ID exclusiva da instrução para a solicitação enviada. Não permite valor nulo. |
Comentários
Para executar código 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 muda para o modo preventivo. Os valores temporais 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 linha, o SQL Server atribui um thread de trabalho para coordenar os threads de trabalho responsáveis por concluir tarefas atribuídas a eles. Nesta DMV, somente o thread do coordenador fica visível para a solicitação. As colunas reads
, writes
, logical_reads
e row_count
não são atualizadas para o thread do coordenador. As colunas wait_type
, wait_time
, last_wait_type
, wait_resource
e granted_query_memory
somente são atualizadas para o thread do coordenador. Para saber mais, confira o Guia de arquitetura de threads e tarefas.
A wait_resource
coluna contém informações semelhantes às resource_description
do sys.dm_tran_locks (Transact-SQL), mas é 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, por isso, sys.dm_exec_requests
é sempre limitado à conexão atual.
Em cenários de grupo de disponibilidade, se a réplica secundária for 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 sys.dm_exec_requests
acesso não será aprovada para bancos de dados no grupo de disponibilidade, mesmo que VIEW SERVER STATE
a permissão esteja presente.
Para SQL Server 2022 (16.x) e versões posteriores, sys.dm_exec_requests
requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.
Exemplos
R. Localizar o texto da consulta para um lote em execução
O exemplo a seguir consulta sys.dm_exec_requests
para localizar a consulta interessante e copiar o sql_handle
da saída.
SELECT * FROM sys.dm_exec_requests;
GO
Em seguida, para obter o texto da instrução, use o sql_handle
copiado com a função do sistema sys.dm_exec_sql_text(sql_handle)
.
SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO
B. Localizar todos os bloqueios que um lote em execução está mantendo
O exemplo a seguir consulta sys.dm_exec_requests
para localizar o lote interessante e copiar o transaction_id
da saída.
SELECT * FROM sys.dm_exec_requests;
GO
Em seguida, para localizar informações de bloqueio, use o transaction_id
copiado com a função do sistema sys.dm_tran_locks
.
SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
AND request_owner_id = < copied transaction_id >;
GO
C. Encontre todas as solicitações bloqueadas no momento
O exemplo a seguir consulta sys.dm_exec_requests
para localizar 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
D. Ordenar solicitações 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
Conteúdo relacionado
- Exibições de gerenciamento dinâmico do sistema
- Funções e exibições de gerenciamento dinâmico relacionadas à execução (Transact-SQL)
- sys.dm_os_memory_clerks (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- sys.dm_exec_query_memory_grants (Transact-SQL)
- sys.dm_exec_query_plan (Transact-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- SQL Server, objeto SQL Statistics
- Guia de arquitetura de processamento de consultas
- Guia de arquitetura de tópicos e tarefas
- Guia de controle de versão de linha e bloqueio de transações
- Entender e resolver problemas de bloqueio do SQL Server