Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
ponto de extremidade de análise SQL no Microsoft Fabric
Warehouse 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_requests
o .
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_offset e 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_offset e 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_id 0 , 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_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
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_description
do 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_locks
do 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
Conteúdo relacionado
- Visualizações de gerenciamento dinâmico do sistema
- Visualizações e funçõ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 threads e tarefas
- Guia de bloqueio de transações e controle de versão de linhas
- Compreender e resolver problemas de bloqueio do SQL Server