sys.dm_exec_requests (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
返回有关在 SQL Server 中正在执行的每个请求的信息。 有关请求的详细信息,请参阅线程和任务体系结构指南。
注意
要从 Azure Synapse Analytics 或 Analytics Platform System (PDW) 中的专用 SQL 池中调用它,请参阅 sys.dm_pdw_exec_requests (Transact-SQL)。 对于无服务器 SQL 池或 Microsoft Fabric,请使用 sys.dm_exec_requests
。
列名称 | 数据类型 | 描述 |
---|---|---|
session_id |
smallint | 与此请求相关的会话的 ID。 不可为 Null。 |
request_id |
int | 请求的 ID。 在会话的上下文中是唯一的。 不可为 Null。 |
start_time |
datetime | 请求到达时的时间戳。 不可为 Null。 |
status |
nvarchar(30) | 请求的状态。 可以是以下其中一个值: background rollback “正在运行” 可运行 正在睡眠 suspended 不可为 Null。 |
command |
nvarchar(32) | 标识正在处理的命令的当前类型。 常用命令类型包括以下值: SELECT INSERT UPDATE DELETE BACKUP LOG BACKUP DATABASE DBCC FOR 可以使用与请求对应的 sql_handle 文本来检索sys.dm_exec_sql_text 请求的文本。 内部系统进程将基于它们所执行任务的类型来设置该命令。 这些任务可以包括以下值:LOCK MONITOR CHECKPOINTLAZY WRITER 不可为 Null。 |
sql_handle |
varbinary(64) | 是唯一标识查询所属的批处理或存储过程的令牌。 Nullable。 |
statement_start_offset |
int | 以字节为单位表示当前正在执行的批处理或持久化对象的当前正在执行的语句的起始位置,从 0 开始。 可以与 sql_handle 、statement_end_offset 和 sys.dm_exec_sql_text 动态管理函数一起使用,以便为请求检索当前正在执行的语句。 Nullable。 |
statement_end_offset |
int | 以字节为单位表示当前正在执行的批处理或持久化对象的当前正在执行的语句的结束位置,从 0 开始。 可以与 sql_handle 、statement_start_offset 和 sys.dm_exec_sql_text 动态管理函数一起使用,以便为请求检索当前正在执行的语句。 Nullable。 |
plan_handle |
varbinary(64) | 是唯一标识当前正在执行的批处理的查询执行计划的令牌。 Nullable。 |
database_id |
smallint | 对其执行请求的数据库的 ID。 不可为 Null。 在 Azure SQL 数据库中,这些值在单一数据库或弹性池中是唯一的,但在逻辑服务器中不是唯一的。 |
user_id |
int | 提交请求的用户的 ID。 不可为 Null。 |
connection_id |
uniqueidentifier | 请求到达时所采用的连接的 ID。 Nullable。 |
blocking_session_id |
smallint | 正在阻塞请求的会话的 ID。 如果此列或NULL 0 未阻止请求,或者阻止会话的会话信息不可用(或无法识别)。 有关详细信息,请参阅了解并解决 SQL Server 阻塞问题。-2 = 阻塞资源由孤立的分布式事务拥有。 -3 = 阻塞资源由延迟的恢复事务拥有。 -4 = session_id 由于内部闩锁状态转换,目前无法确定阻塞闩锁所有者。-5 = session_id 无法确定阻塞闩锁的所有者,因为它未跟踪此闩锁类型(例如,对于 SH 闩锁)。本身 blocking_session_id -5 ,并不表示性能问题。 -5 指示会话正在等待异步操作完成。 在引入之前-5 ,即使它仍处于等待状态,也会显示blocking_session_id 0 同一会话。根据工作负荷,观察 blocking_session_id = -5 可能是常见的情况。 |
wait_type |
nvarchar(60) | 如果请求当前被阻塞,则此列返回等待类型。 Nullable。 有关等待类型的信息,请参阅 。 |
wait_time |
int | 如果请求当前被阻塞,则此列返回当前等待的持续时间(以毫秒为单位)。 不可为 Null。 |
last_wait_type |
nvarchar(60) | 如果此请求先前已经阻塞,则此列返回上次等待的类型。 不可为 Null。 |
wait_resource |
nvarchar(256) | 如果请求当前被阻塞,则此列返回请求当前等待的资源。 不可为 Null。 |
open_transaction_count |
int | 为此请求打开的事务数。 不可为 Null。 |
open_resultset_count |
int | 为此请求打开的结果集的个数。 不可为 Null。 |
transaction_id |
bigint | 在其中执行此请求的事务的 ID。 不可为 Null。 |
context_info |
varbinary(128) | 会话的 CONTEXT_INFO 值。 Nullable。 |
percent_complete |
real | 为以下命令完成的工作的百分比:ALTER INDEX REORGANIZE AUTO_SHRINK 选项 ALTER DATABASE BACKUP DATABASE DBCC CHECKDB DBCC CHECKFILEGROUP DBCC CHECKTABLE DBCC INDEXDEFRAG DBCC SHRINKDATABASE DBCC SHRINKFILE RECOVERY RESTORE DATABASE ROLLBACK TDE ENCRYPTION 不可为 Null。 |
estimated_completion_time |
bigint | 仅限内部。 不可为 Null。 |
cpu_time |
int | 请求所使用的 CPU 时间(毫秒)。 不可为 Null。 |
total_elapsed_time |
int | 请求到达后经过的总时间(毫秒)。 不可为 Null。 |
scheduler_id |
int | 正在计划此请求的计划程序的 ID。 Nullable。 |
task_address |
varbinary(8) | 分配给与此请求关联的任务的内存地址。 Nullable。 |
reads |
bigint | 此请求执行的读取数。 不可为 Null。 |
writes |
bigint | 此请求执行的写入数。 不可为 Null。 |
logical_reads |
bigint | 此请求已经执行的逻辑读取数。 不可为 Null。 |
text_size |
int | 此请求的 TEXTSIZE 设置。 不可为 Null。 |
language |
nvarchar(128) | 该请求的语言设置。 Nullable。 |
date_format |
nvarchar(3) | 该请求的 DATEFORMAT 设置。 Nullable。 |
date_first |
smallint | 该请求的 DATEFIRST 设置。 不可为 Null。 |
quoted_identifier |
bit | 1 = QUOTED_IDENTIFIER 对于该请求是 ON。 否则返回 0。 不可为 Null。 |
arithabort |
bit | 1 = ARITHABORT 设置对于该请求是 ON。 否则返回 0。 不可为 Null。 |
ansi_null_dflt_on |
bit | 1 = ANSI_NULL_DFLT_ON 设置对于该请求是 ON。 否则返回 0。 不可为 Null。 |
ansi_defaults |
bit | 1 = ANSI_DEFAULTS 设置对于该请求是 ON。 否则返回 0。 不可为 Null。 |
ansi_warnings |
bit | 1 = ANSI_WARNINGS 设置对于该请求是 ON。 否则返回 0。 不可为 Null。 |
ansi_padding |
bit | 1 = ANSI_PADDING 设置对于该请求是 ON。 否则返回 0。 不可为 Null。 |
ansi_nulls |
bit | 1 = ANSI_NULLS 设置对于该请求是 ON。 否则返回 0。 不可为 Null。 |
concat_null_yields_null |
bit | 1 = CONCAT_NULL_YIELDS_NULL 设置对于该请求是 ON。 否则返回 0。 不可为 Null。 |
transaction_isolation_level |
smallint | 创建此请求的事务时使用的隔离级别。 不可为 Null。 0 = 未指定 1 = ReadUncommitted 2 = 已提交读取 3 = 可重复 4 = 可序列化 5 = 快照 |
lock_timeout |
int | 此请求的锁定超时时间(毫秒)。 不可为 Null。 |
deadlock_priority |
int | 请求的 DEADLOCK_PRIORITY 设置。 不可为 Null。 |
row_count |
bigint | 已由此请求返回到客户端的行数。 不可为 Null。 |
prev_error |
int | 在执行请求期间发生的最后一个错误。 不可为 Null。 |
nest_level |
int | 正在对请求执行的代码的嵌套级别。 不可为 Null。 |
granted_query_memory |
int | 为执行该请求的查询而分配的页数。 不可为 Null。 |
executing_managed_code |
bit | 指示特定请求当前是否正在执行公共语言运行时对象,例如例程、类型和触发器。 只要某个公共语言运行时对象在堆栈中,就会设置此值,甚至从公共语言运行时中运行 Transact-SQL 时,也会设置。 不可为 Null。 |
group_id |
int | 此查询所属工作负荷组的 ID。 不可为 Null。 |
query_hash |
binary(8) | 对查询计算的二进制哈希值,用于标识具有类似逻辑的查询。 可以使用查询哈希确定仅仅是文字值不同的查询的聚合资源使用情况。 |
query_plan_hash |
binary(8) | 对查询执行计划计算的二进制哈希值,用于标识类似的查询执行计划。 可以使用查询计划哈希查找具有类似执行计划的查询的累积成本。 |
statement_sql_handle |
varbinary(64) | 适用于:SQL Server 2014 (12.x) 及更高版本。sql_handle 的单个查询。如果数据库未启用查询存储,则此列为 NULL。 |
statement_context_id |
bigint | 适用于:SQL Server 2014 (12.x) 及更高版本。 可选外键到 sys.query_context_settings .如果数据库未启用查询存储,则此列为 NULL。 |
dop |
int | 适用于:SQL Server 2016 (13.x) 及更高版本。 查询的并行度 |
parallel_worker_count |
int | 适用于:SQL Server 2016 (13.x) 及更高版本。 如果这是并行查询,则为保留的并行辅助角色数。 |
external_script_request_id |
uniqueidentifier | 适用于:SQL Server 2016 (13.x) 及更高版本。 与当前请求关联的外部脚本请求 ID。 |
is_resumable |
bit | 适用于:SQL Server 2017 (14.x) 及更高版本。 指示请求是否为可恢复的索引操作。 |
page_resource |
binary(8) | 适用于: SQL Server 2019 (15.x) 如果 wait_resource 列包含页面,则为页面资源的 8 字节十六进制表示形式。 有关详细信息,请参阅 sys.fn_PageResCracker。 |
page_server_reads |
bigint | 适用范围:Azure SQL 数据库超大规模 此请求执行的页服务器读取数。 不可为 Null。 |
dist_statement_id |
uniqueidentifier | 适用于:SQL Server 2022 及更高版本、Azure SQL 数据库、Azure SQL 托管实例、Azure Synapse Analytics(仅限无服务器池)和 Microsoft Fabric 所提交请求的语句的唯一 ID。 不可为 Null。 |
注解
要执行在 SQL Server 以外的代码(例如,扩展存储过程和分布式查询),则必须在非抢先计划程序的控制范围以外执行该线程。 若要这样做,工作线程将切换到抢先模式。 由此动态管理视图返回的时间值不包括在抢先模式下花费的时间。
在行模式下执行并行请求时,SQL Server 将分配工作线程,来协调负责完成已向其分配的任务的工作线程。 在此 DMV 中,只有协调器线程对请求可见。 协调器线程的 reads
、writes
、logical_reads
和 row_count
列未更新。 仅更新协调器线程的 wait_type
、wait_time
、last_wait_type
、wait_resource
和 granted_query_memory
列。 有关详细信息,请参阅线程和任务体系结构指南。
该wait_resource
列包含与 sys.dm_tran_locks(Transact-SQL)中的类似信息resource_description
,但格式不同。
权限
如果用户对服务器具有 VIEW SERVER STATE
权限,则用户会看到 SQL Server 实例上执行的所有会话;否则,用户只看到当前会话。 VIEW SERVER STATE
不能在 Azure SQL 数据库中授予,因此 sys.dm_exec_requests
总是限制于当前连接。
在可用性组方案中,如果辅助副本设置为只读意向,则与辅助副本的连接必须通过添加applicationintent=readonly
在连接字符串参数中指定其应用程序意向。 否则,即使存在权限,VIEW SERVER STATE
访问检查sys.dm_exec_requests
也不会为可用性组中的数据库传递。
对于 SQL Server 2022(16.x)及更高版本, sys.dm_exec_requests
需要对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。
示例
A. 查找正在运行的批处理的查询文本
以下示例查询 sys.dm_exec_requests
以查找感兴趣的查询并从输出复制其 sql_handle
。
SELECT * FROM sys.dm_exec_requests;
GO
然后,为了获取语句文本,将复制的 sql_handle
与系统函数 sys.dm_exec_sql_text(sql_handle)
一起使用。
SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO
B. 查找正在运行的批处理持有的所有锁
以下示例查询 sys.dm_exec_requests
以查找感兴趣的批处理并从输出复制其 transaction_id
。
SELECT * FROM sys.dm_exec_requests;
GO
然后,为了查找锁信息,将复制的 transaction_id
与系统函数 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 查找当前阻止的所有请求
以下示例查询 sys.dm_exec_requests
以查找有关被阻塞的请求的信息。
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. 按 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
相关内容
- 系统动态管理视图
- 与执行有关的动态管理视图和函数 (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 SQL Statistics 对象
- 查询处理体系结构指南
- 线程和任务体系结构指南
- 事务锁定和行版本控制指南
- 了解和解决 SQL Server 阻塞问题