sys.dm_exec_requests (Transact-SQL)
Se aplica a: punto de conexión de SQL Server
Azure SQL Database
Azure SQL Instancia administrada
punto de conexión de SQL Analytics Analytics Platform System (PDW) de SQL Analytics
System (PDW)
de SQL Server en Microsoft Fabric
Warehouse en Microsoft Fabric
Devuelve información acerca de cada solicitud que se está ejecutando en SQL Server. Para obtener más información sobre las solicitudes, consulte la Guía de arquitectura de subprocesos y tareas.
Nota:
Para llamarlo desde un grupo de SQL dedicado de Azure Synapse Analytics o Analytics Platform System (PDW), consulte sys.dm_pdw_exec_requests (Transact-SQL). Para el grupo de SQL sin servidor o Microsoft Fabric, use sys.dm_exec_requests
.
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
session_id |
smallint | Identificador de la sesión con la que está relacionada esta solicitud. No acepta valores NULL. |
request_id |
int | Id. de la solicitud. Es único en el contexto de la sesión. No acepta valores NULL. |
start_time |
datetime | Marca de tiempo de la llegada de la solicitud. No acepta valores NULL. |
status |
nvarchar(30) | Estado de la solicitud. Puede ser uno de los siguientes valores: background rollback en ejecución ejecutable en espera suspended No acepta valores NULL. |
command |
nvarchar(32) | Identifica el tipo de comando actual que se está procesando. Los tipos de comandos comunes incluyen los siguientes valores: SELECT INSERT UPDATE Delete BACKUP LOG BACKUP DATABASE DBCC FOR El texto de la solicitud se puede recuperar mediante sys.dm_exec_sql_text con el correspondiente sql_handle para la solicitud. Los procesos internos del sistema establecen el comando según el tipo de tarea que realizan. Las tareas pueden incluir los siguientes valores:LOCK MONITOR CHECKPOINTLAZY WRITER No acepta valores NULL. |
sql_handle |
varbinary(64) | Es un token que identifica de forma única el lote o el procedimiento almacenado del que forma parte la consulta. Acepta valores NULL. |
statement_start_offset |
int | Indica, en bytes, a partir de 0, la posición inicial de la instrucción que se está ejecutando actualmente para el objeto almacenado o el lote que se está ejecutando actualmente. Se puede usar junto con sql_handle , statement_end_offset y la función de administración dinámica sys.dm_exec_sql_text con el fin de recuperar la instrucción que se está ejecutando actualmente para la solicitud. Acepta valores NULL. |
statement_end_offset |
int | Indica, en bytes, a partir de 0, la posición final de la instrucción que se está ejecutando actualmente para el objeto almacenado o el lote que se está ejecutando actualmente. Se puede usar junto con sql_handle , statement_start_offset y la función de administración dinámica sys.dm_exec_sql_text con el fin de recuperar la instrucción que se está ejecutando actualmente para la solicitud. Acepta valores NULL. |
plan_handle |
varbinary(64) | Es un token que identifica de forma exclusiva un plan de ejecución de consulta para un lote que se está ejecutando actualmente. Acepta valores NULL. |
database_id |
smallint | Identificador de la base de datos en la que se ejecuta la solicitud. No acepta valores NULL. En Azure SQL Database, los valores son únicos dentro de una base de datos única o un grupo elástico, pero no dentro de un servidor lógico. |
user_id |
int | Identificador del usuario que envió la solicitud. No acepta valores NULL. |
connection_id |
uniqueidentifier | Identificador de la conexión a la que ha llegado la solicitud. Acepta valores NULL. |
blocking_session_id |
smallint | Id. de la sesión que bloquea la solicitud. Si esta columna es NULL o 0 , la solicitud no está bloqueada o la información de sesión de la sesión de bloqueo no está disponible (o no se puede identificar). Para obtener más información, consulte Descripción y resolución de problemas de bloqueo en SQL Server.-2 = El recurso de bloqueo es propiedad de una transacción distribuida huérfana. -3 = El recurso de bloqueo es propiedad de una transacción de recuperación diferida. -4 = session_id del propietario del bloqueo del bloqueo temporal no se pudo determinar en este momento debido a transiciones de estado de bloqueo temporal interno.-5 = session_id del propietario del bloqueo del bloqueo temporal no se pudo determinar porque no se realiza un seguimiento de este tipo de bloqueo temporal (por ejemplo, para un bloqueo temporales SH).Por sí mismo, blocking_session_id -5 no indica un problema de rendimiento. -5 es una indicación de que la sesión está esperando a que se complete una acción asincrónica. Antes de -5 la introducción, la misma sesión habría mostrado blocking_session_id 0 , aunque todavía estaba en un estado de espera.En función de la carga de blocking_session_id = -5 trabajo, observar puede ser una repetición común. |
wait_type |
nvarchar(60) | Si la solicitud está actualmente bloqueada, esta columna devuelve el tipo de espera. Acepta valores NULL. Para obtener más información sobre los tipos de esperas, consulte sys.dm_os_wait_stats (Transact-SQL). |
wait_time |
int | Si la solicitud está actualmente bloqueada, esta columna devuelve la duración en milisegundos de la espera actual. No acepta valores NULL. |
last_wait_type |
nvarchar(60) | Si esta solicitud se ha bloqueado anteriormente, esta columna devuelve el tipo de la última espera. No acepta valores NULL. |
wait_resource |
nvarchar(256) | Si la solicitud está actualmente bloqueada, esta columna devuelve el recurso por el que está esperando la solicitud actualmente. No acepta valores NULL. |
open_transaction_count |
int | Número de transacciones abiertas para esta solicitud. No acepta valores NULL. |
open_resultset_count |
int | Número de conjuntos de resultados abiertos para esta solicitud. No acepta valores NULL. |
transaction_id |
bigint | Identificador de la transacción donde se ejecuta esta solicitud. No acepta valores NULL. |
context_info |
varbinary(128) | Valor CONTEXT_INFO de la sesión. Acepta valores NULL. |
percent_complete |
real | Porcentaje de trabajo completado en los siguientes comandos:ALTER INDEX REORGANIZE AUTO_SHRINK opción con ALTER DATABASE BACKUP DATABASE DBCC CHECKDB DBCC CHECKFILEGROUP DBCC CHECKTABLE DBCC INDEXDEFRAG DBCC SHRINKDATABASE DBCC SHRINKFILE RECOVERY RESTORE DATABASE ROLLBACK TDE ENCRYPTION No acepta valores NULL. |
estimated_completion_time |
bigint | Solo interno. No acepta valores NULL. |
cpu_time |
int | Tiempo de CPU en milisegundos utilizado por la solicitud. No acepta valores NULL. |
total_elapsed_time |
int | Tiempo total transcurrido en milisegundos desde que llegó la solicitud. No acepta valores NULL. |
scheduler_id |
int | Identificador del programador que programa esta solicitud. Acepta valores NULL. |
task_address |
varbinary(8) | Dirección de memoria asignada a la tarea asociada con esta solicitud. Acepta valores NULL. |
reads |
bigint | Número de lecturas realizadas por esta solicitud. No acepta valores NULL. |
writes |
bigint | Número de escrituras realizadas por esta solicitud. No acepta valores NULL. |
logical_reads |
bigint | Número de lecturas lógicas realizadas por la solicitud. No acepta valores NULL. |
text_size |
int | Valor de TEXTSIZE para esta solicitud. No acepta valores NULL. |
language |
nvarchar(128) | Configuración de idioma para esta solicitud. Acepta valores NULL. |
date_format |
nvarchar (3) | Valor de DATEFORMAT para esta solicitud. Acepta valores NULL. |
date_first |
smallint | Valor de DATEFIRST para esta solicitud. No acepta valores NULL. |
quoted_identifier |
bit | 1 = El valor de QUOTED_IDENTIFIER es ON para la solicitud. De lo contrario, es 0. No acepta valores NULL. |
arithabort |
bit | 1 = El valor de ARITHABORT es ON para la solicitud. De lo contrario, es 0. No acepta valores NULL. |
ansi_null_dflt_on |
bit | 1 = El valor de ANSI_NULL_DFLT_ON es ON para la solicitud. De lo contrario, es 0. No acepta valores NULL. |
ansi_defaults |
bit | 1 = El valor de ANSI_DEFAULTS es ON para la solicitud. De lo contrario, es 0. No acepta valores NULL. |
ansi_warnings |
bit | 1 = El valor de ANSI_WARNINGS es ON para la solicitud. De lo contrario, es 0. No acepta valores NULL. |
ansi_padding |
bit | 1 = El valor de ANSI_PADDING es ON para la solicitud. De lo contrario, es 0. No acepta valores NULL. |
ansi_nulls |
bit | 1 = El valor de ANSI_NULLS es ON para la solicitud. De lo contrario, es 0. No acepta valores NULL. |
concat_null_yields_null |
bit | 1 = El valor de CONCAT_NULL_YIELDS_NULL es ON para la solicitud. De lo contrario, es 0. No acepta valores NULL. |
transaction_isolation_level |
smallint | Nivel de aislamiento con el que se creó la transacción para esta solicitud. No acepta valores NULL. 0 = Unspecified 1 = ReadUncomitted 2 = ReadCommitted 3 = Repeatable 4 = Serializable 5 = Snapshot |
lock_timeout |
int | Tiempo de espera de bloqueo en milisegundos para esta solicitud. No acepta valores NULL. |
deadlock_priority |
int | Valor de DEADLOCK_PRIORITY para la solicitud. No acepta valores NULL. |
row_count |
bigint | Número de filas que esta solicitud ha devuelto al cliente. No acepta valores NULL. |
prev_error |
int | Último error que se ha producido durante la ejecución de la solicitud. No acepta valores NULL. |
nest_level |
int | Nivel de anidamiento actual del código que se está ejecutando en la solicitud. No acepta valores NULL. |
granted_query_memory |
int | Número de páginas asignadas a la ejecución de una consulta en la solicitud. No acepta valores NULL. |
executing_managed_code |
bit | Indica si una solicitud concreta está ejecutando actualmente objetos Common Language Runtime, como rutinas, tipos y desencadenadores. Se establece para todo el tiempo que un objeto Common Language Runtime esté en la pila, incluso mientras se ejecuta Transact-SQL desde Common Language Runtime. No acepta valores NULL. |
group_id |
int | Identificador del grupo de cargas de trabajo al que pertenece esta consulta. No acepta valores NULL. |
query_hash |
binary(8) | Valor hash binario que se calcula en la consulta y que se usa para identificar consultas con una lógica similar. Puede usar el hash de consulta para determinar el uso de recursos agregados para las consultas que solo se diferencian en los valores literales. |
query_plan_hash |
binary(8) | Valor hash binario que se calcula en el plan de ejecución de consulta y que se usa para identificar planes de ejecución de consulta similares. Puede usar el hash del plan de consulta para buscar el costo acumulativo de las consultas con planes de ejecución similares. |
statement_sql_handle |
varbinary(64) | Válido para : SQL Server 2014 (12.x) y versiones posteriores.sql_handle de la consulta individual.Esta columna es NULL si el Almacén de consultas no está habilitado para la base de datos. |
statement_context_id |
bigint | Válido para : SQL Server 2014 (12.x) y versiones posteriores. Clave externa opcional en sys.query_context_settings .Esta columna es NULL si el Almacén de consultas no está habilitado para la base de datos. |
dop |
int | Válido para : SQL Server 2016 (13.x) y versiones posteriores. Grado de paralelismo de la consulta. |
parallel_worker_count |
int | Válido para : SQL Server 2016 (13.x) y versiones posteriores. Número de trabajadores paralelos reservados si se trata de una consulta paralela. |
external_script_request_id |
uniqueidentifier | Válido para : SQL Server 2016 (13.x) y versiones posteriores. Identificador de solicitud de script externo asociado a la solicitud actual. |
is_resumable |
bit | Se aplica a: SQL Server 2017 (14.x) y versiones posteriores. Indica si la solicitud es una operación de índice reanudable. |
page_resource |
binary(8) | Se aplica a: SQL Server 2019 (15.x) Representación hexadecimal de 8 bytes del recurso de página si la columna wait_resource contiene una página. Para obtener más información, consulte sys.fn_PageResCracker. |
page_server_reads |
bigint | Se aplica a: Hiperescala de Azure SQL Database Número de lecturas del servidor de páginas realizadas por esta solicitud. No acepta valores NULL. |
dist_statement_id |
uniqueidentifier | Se aplica a: SQL Server 2022 y versiones posteriores, Azure SQL Database, Azure SQL Instancia administrada, Azure Synapse Analytics (solo grupos sin servidor) y Microsoft Fabric Identificador único de la instrucción para la solicitud enviada. No acepta valores NULL. |
Comentarios
Para ejecutar código situado fuera de SQL Server (por ejemplo, en procedimientos almacenados extendidos y consultas distribuidas), se tiene que ejecutar un subproceso fuera del control del programador no preferente. Para hacerlo, un trabajador se cambia al modo preferente. Los valores de tiempo que devuelve esta vista de administración dinámica no incluyen el tiempo transcurrido en modo preferente.
Cuando se ejecutan solicitudes en serie en modo de fila, SQL Server asigna un subproceso de trabajo para coordinar los subprocesos de trabajo responsables de completar las tareas que tienen asignadas. En esta DMV, solo el subproceso coordinador está visible para la solicitud. Las columnas reads
, writes
, logical_reads
y row_count
no se actualizan para el subproceso coordinador. Las columnas wait_type
, wait_time
, last_wait_type
, wait_resource
y granted_query_memory
solo se actualizan para el subproceso coordinador. Para más información, consulte la guía de arquitectura de subprocesos y tareas.
La wait_resource
columna contiene información similar a resource_description
en sys.dm_tran_locks (Transact-SQL), pero tiene un formato diferente.
Permisos
Si el usuario tiene VIEW SERVER STATE
permiso en el servidor, el usuario ve todas las sesiones en ejecución en la instancia de SQL Server; de lo contrario, el usuario ve solo la sesión actual. VIEW SERVER STATE
no se puede conceder en Azure SQL Database, por lo que sys.dm_exec_requests
siempre se limita a la conexión actual.
En escenarios de grupo de disponibilidad, si la réplica secundaria está establecida en solo lectura, la conexión a la secundaria debe especificar su intención de aplicación en cadena de conexión parámetros agregando applicationintent=readonly
. De lo contrario, la comprobación sys.dm_exec_requests
de acceso de no pasa las bases de datos del grupo de disponibilidad, incluso si VIEW SERVER STATE
el permiso está presente.
Para SQL Server 2022 (16.x) y versiones posteriores, sys.dm_exec_requests
requiere el permiso VIEW SERVER PERFORMANCE STATE en el servidor.
Ejemplos
A Buscar el texto de consulta de un lote en ejecución
En el siguiente ejemplo se consulta sys.dm_exec_requests
para buscar la consulta de interés y copiar su sql_handle
desde la salida.
SELECT * FROM sys.dm_exec_requests;
GO
Después, para obtener el texto de la instrucción, use el sql_handle
copiado con la función del sistema sys.dm_exec_sql_text(sql_handle)
.
SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO
B. Buscar todos los bloqueos que contiene un lote en ejecución
En el siguiente ejemplo se consulta sys.dm_exec_requests
para buscar el lote de interés y copiar su transaction_id
desde la salida.
SELECT * FROM sys.dm_exec_requests;
GO
Después, para buscar información de bloqueo, use el transaction_id
copiado con la función del 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. Búsqueda de todas las solicitudes bloqueadas actualmente
En el siguiente ejemplo, se consulta sys.dm_exec_requests
para buscar información sobre las solicitudes 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 las solicitudes 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
Contenido relacionado
- Vistas de administración dinámica del sistema
- Funciones y vistas de administración dinámica relacionadas con ejecuciones (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
- Guía de arquitectura de procesamiento de consultas
- Guía de arquitectura de subprocesos y tareas
- Guía de versiones de fila y bloqueo de transacciones
- Descripción y resolución de problemas de bloqueo en SQL Server