mssql sqlserver 系统视图 sys.dm_exec_requests 简介说明


摘要:
下文讲述系统视图 sys.dm_exec_requests 的用法及说明,如下所示:
实验环境:sql server 2008


sys.dm_exec_requests 功能说明:
返回sqlserver引擎当前正在执行的请求;
通过此系统视图,我们可以获取sqlserver中的进程状态,检索出阻塞的进程信息和进程所属的sql脚本。

返回值说明:
我们可以通过运行:

  select * from  sys.dm_exec_requests
 

返回相应的进程列表信息,如下所示主要列信息:
session_id:smallint 请求所属会话ID
request_id:int 请求ID
start_time:datetime 请求开始时间
status:nvarchar(30) 请求所属状态
Running 正在运行
Runable 可运行
Sleeping 休眠
suspended 挂起
command:nvarchar(32) 当前命令类型,如下
SELECT
Insert
UPDATE
delete
BACKUP LOG
BACKUP DATABASE
DBCC
FOR
sql_handle:varbinary(64) 请求的 SQL 文本的哈希映射。 可以为 Null。
plan_handle:varbinary(64) 用于执行 SQL 的计划的哈希映射。 可以为 Null。
database_id:smallint 当前请求对应的数据库iD
user_id:int 提交请求用户对应iD
connection_id: uniqueidentifier 请求到达时所采用的连接的 ID
blocking_session_id: smallint 正在阻塞请求的会话的 ID。
如果此列为 NULL,则表示请求未被阻塞,或锁定会话的会话信息不可用(或无法进行标识)。
-2 = 阻塞资源由孤立的分布式事务拥有。
-3 = 阻塞资源由延迟的恢复事务拥有。
-4 = 由于内部闩锁状态转换而导致此时无法确定阻塞闩锁所有者的会话 ID。
wait_type:nvarchar(60) 如果请求当前被阻塞,则此列返回等待类型。

cpu_time: int 请求所使用的 CPU 时间(毫秒)
total_elapsed_time: int 请求到达后经过的总时间(毫秒)
reads: bigint 此请求执行的读取数
Writes: bigint 此请求执行的写入数
logical_reads: bigint 此请求已经执行的逻辑读取数
text_size: int 此请求的 TEXTSIZE 设置
row_count: bigint 已由此请求返回到客户端的行数。 不可为 null。



sys.dm_exec_requests 举例应用:

  ----获取当前sqlserver引擎所有的活动进程
  SELECT * FROM sys.dm_exec_requests;  
  GO
  ---1 获取所有被阻塞的请求
SELECT session_id ,status ,blocking_session_id  
    ,wait_type ,wait_time ,wait_resource   
    ,transaction_id ,sql_handle  
FROM sys.dm_exec_requests   
WHERE status = N'suspended';  
GO  
 ---2.将上表中的sql_handle放入以下存储过程中运行,返回相应的sql脚本
SELECT * FROM sys.dm_exec_sql_text(sql_handle);