sys.dm_exec_requests (Transact-SQL)

返回有关在 SQL Server 中执行的每个请求的信息。

注意注意

若要执行在 SQL Server 以外的代码(例如,扩展存储过程和分布式查询),则必须在非抢先计划程序的控制范围以外执行该线程。若要这样做,工作线程将切换到抢先模式。由此动态管理视图返回的时间值不包括在抢先模式下花费的时间。

列名

数据类型

说明

session_id

smallint

与此请求相关的会话的 ID。不可为 Null 值。

request_id

int

请求的 ID。在会话的上下文中是唯一的。不可为 Null 值。

start_time

datetime

请求到达时的时间戳。不可为 Null 值。

status

nvarchar(30)

请求的状态。可以是以下值:

  • 后台

  • 正在运行

  • 可运行

  • 睡眠

  • 已挂起

不可为 Null 值。

command

nvarchar(16)

标识正在处理的命令的当前类型。常用命令类型包括:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • BACKUP LOG

  • BACKUP DATABASE

  • DBCC

  • WAITFOR

可通过结合使用 sys.dm_exec_sql_text 和与请求对应的 sql_handle 检索请求的文本。内部系统进程将基于它们所执行任务的类型来设置该命令。这些任务可以包括:

  • LOCK MONITOR

  • CHECKPOINTLAZY

  • WRITER

不可为 Null 值。

sql_handle

varbinary(64)

请求的 SQL 文本的哈希映射。可以为 Null。

statement_start_offset

int

在当前正在执行的批处理或存储过程中,指示当前正在执行的语句开始位置的字符数。可以与 sql_handle、statement_end_offset 和 sys.dm_exec_sql_text 动态管理函数一起使用,以便为请求检索当前正在执行的语句。可以为 Null。

statement_end_offset

int

在当前正在执行的批处理或存储过程中,指示当前正在执行的语句结束位置的字符数。可以与 sql_handle、statement_end_offset 和 sys.dm_exec_sql_text 动态管理函数一起使用,以便为请求检索当前正在执行的语句。可以为 Null。

plan_handle

varbinary(64)

用于执行 SQL 的计划的哈希映射。可以为 Null。

database_id

smallint

对其执行请求的数据库的 ID。不可为 Null 值。

user_id

int

提交请求的用户的 ID。不可为 Null 值。

connection_id

uniqueidentifier

请求到达时所采用的连接的 ID。可以为 Null。

blocking_session_id

smallint

正在阻塞请求的会话的 ID。如果此列为 NULL,则表示请求未被阻塞,或锁定会话的会话信息不可用(或无法进行标识)。

-2 = 阻塞资源由孤立的分布式事务拥有。

-3 = 阻塞资源由延迟的恢复事务拥有。

-4 = 由于内部闩锁状态转换而导致此时无法确定阻塞闩锁所有者的会话 ID。

wait_type

nvarchar(60)

如果请求当前被阻塞,则此列返回等待类型。可以为 Null。

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 值。可以为 Null。

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。不可为 Null 值。

task_address

varbinary(8)

分配给与此请求关联的任务的内存地址。可以为 Null。

reads

bigint

此请求执行的读取数。不可为 Null 值。

writes

bigint

此请求执行的写入数。不可为 Null 值。

logical_reads

bigint

此请求已经执行的逻辑读取数。不可为 Null 值。

text_size

int

此请求的 TEXTSIZE 设置。不可为 Null 值。

language

nvarchar(128)

该请求的语言设置。可以为 Null。

date_format

nvarchar(3)

该请求的 DATEFORMAT 设置。可以为 Null。

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 值。

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)

对查询执行计划计算的二进制哈希值,用于标识类似的查询执行计划。可以使用查询计划哈希查找具有类似执行计划的查询的累积成本。有关详细信息,请参阅 使用查询和查询计划哈希值查找和优化类似查询

权限

需要对服务器具有 VIEW SERVER STATE 权限。

注意注意

如果用户对服务器具有 VIEW SERVER STATE 权限,则该用户可以查看 SQL Server 实例上所有正在执行的会话;否则,该用户只能查看当前会话。

示例

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