游子吟

致力于.Net,致力于企业信息化工程!
Harvest = Hope + Struggle

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

针对 SQL Server 内正在执行的每个请求返回一行。sys.dm_exec_connectionssys.dm_exec_sessions 和sys.dm_exec_requests 服务器范围动态管理视图映射到 sys.sysprocesses 系统视图(先前为系统表)。

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

列名数据类型说明

session_id

smallint

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

request_id

int

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

start_time

datetime

计划运行请求的时间。不可为空值。

status

nvarchar(60)

请求的状态。可能的值包括:

  • 后台。请求是后台线程,例如资源监视器或死锁监视器。
  • 正在运行。请求正在运行。
  • 可运行。请求正在运行,由于仲裁不足,因此要临时进行妥善安排。
  • 睡眠。没有要做的工作。
  • 挂起。请求正在等待工作线程选取。
  • 已挂起。请求正在等待某个事件。

不可为空值。

command

nvarchar(32)

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

  • SELECT 
  • INSERT 
  • UPDATE 
  • DELETE 
  • BACKUP LOG 
  • BACKUP DB 
  • DBCC 
  • WAITFOR 

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

  • LOCK MONITOR
  • CHECKPOINTLAZY
  • WRITER

不可为空值。

sql_handle

varbinary(64)

请求的 SQL 语句句柄。该句柄可用于通过sys.dm_exec_sql_text 动态管理函数检索实际语句文本。不可为空值。

statement_start_offset

int

执行批处理或存储过程中的执行语句的开始字符位置。可以与statement_end_offsetsys.dm_exec_sql_text 动态管理函数和 sql_handle 一起使用,为请求检索正在执行的语句。可为空值。

statement_end_offset

int

执行批处理或存储过程中正在执行的语句的结束字符位置。可以与statement_start_offsetsys.dm_exec_sql_text 动态管理函数和 sql_handle 一起使用,为请求检索正在执行的语句。可为空值。

plan_handle

varbinary(64)

请求的查询计划句柄。若要查看查询计划,请结合使用sys.dm_exec_query_plan 动态管理函数。若要查询计划缓存,请使用 sys.dm_exec_cached_plans 动态管理视图。若要查看计划属性,请使用 sys.dm_exec_plan_attributes 函数。可为空值。

database_id

smallint

正在运行请求的数据库的 ID。有关详细的数据库信息,请查询sys.databases 目录视图;或者,若要获得数据库名称,请使用db_name() 内部函数。不可为空值。

user_id

int

正在运行请求的用户 ID。有关详细的用户信息,请查询sys.database_principals 目录视图。不可为空值。

connection_id

uniqueidentifier

请求到达时所采用的连接的 ID。有关物理或逻辑连接的详细信息,请查询 sys.dm_exec_connections 动态管理视图。可为空值。

blocking_session_id

smallint

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

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

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

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

wait_type

nvarchar(60)

如果请求被阻塞,则此列返回等待类型。可为空值。

wait_time

int

如果请求被阻塞,则此列返回当前等待的持续时间(毫秒)。不可为空值。

last_wait_type

nvarchar(64)

如果此请求先前已经阻塞,则此列返回上次等待的类型。不可为空值。

wait_resource

nvarchar(512)

如果请求被阻塞,则此列返回正在等待请求的资源。不可为空值。

open_transaction_count

int

为此请求打开的事务数。不可为空值。

open_resultset_count

int

为此请求打开的结果集的个数。不可为空值。

transaction_id

bigint

在其中执行此请求的事务的 ID。对于 SQL Server 实例,该 ID 是唯一的。用来查询sys.dm_tran_active_transactionssys.dm_tran_locks或 sys.dm_tran_database_transactions 动态管理视图。不可为空值。

context_info

varbinary(128)

请求的 SET CONTEXT_INFO 语句的值。可为空值。

percent_complete

real

为某些操作(包括回滚)完成的工作的百分比。

此操作不提供查询的进度数据。
ms177648.note(zh-cn,SQL.90).gif注意:

不可为空值。

estimated_completion_time

bigint

仅供内部使用。不可为空值。

cpu_time

int

请求所使用的 CPU 时间(毫秒)。不可为空值。

total_elapsed_time

int

请求到达后经过的总时间(毫秒)。不可为空值。

scheduler_id

int

正在计划此请求的计划程序的 ID。有关此计划程序的详细信息,请查询 sys.dm_os_schedulers 动态管理视图。不可为空值。

task_address

varbinary(8)

分配给与此请求关联的任务的内存地址。有关此任务的详细信息,请查询 sys.dm_os_tasks 动态管理视图。可为空值。

reads

bigint

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

Writes

bigint

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

logical_reads

bigint

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

text_size

int

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

language

nvarchar(256)

该请求的语言设置。可为空值。

date_format

nvarchar(3)

该请求的 DATEFORMAT 设置。可为空值。

date_first

smallint

该请求的 DATEFIRST 设置。不可为空值。

quoted_identifier

bit

1 = QUOTED_IDENTIFIER 对于该请求是 ON。否则为 0。

不可为空值。

arithabort

bit

1 = ARITHABORT 设置对于该请求是 ON。否则为 0。

不可为空值。

ansi_null_dflt_on

bit

1 = ANSI_NULL_DFLT_ON 设置对于该请求是 ON。否则为 0。

不可为空值。

ansi_defaults

bit

1 = ANSI_DEFAULTS 设置对于该请求是 ON。否则为 0。

不可为空值。

ansi_warnings

bit

1 = ANSI_WARNINGS 设置对于该请求是 ON。否则为 0。

不可为空值。

ansi_padding

bit

1 = ANSI_PADDING 设置对于该请求是 ON。

否则为 0。

不可为空值。

ansi_nulls

bit

1 = ANSI_NULLS 设置对于该请求是 ON。否则为 0。

不可为空值。

concat_null_yields_null

bit

1 = CONCAT_NULL_YIELDS_NULL 设置对于该请求是 ON。否则为 0。

不可为空值。

transaction_isolation_level

smallint

此请求的事务隔离级别。可能的值包括:

0 = 未指定

1 = 未提交读取

2 = 已提交读取

3 = 可重复

4 = 可序列化

5 = 快照

不可为空值。

lock_timeout

int

此请求的锁超时时间(毫秒)。不可为空值。

deadlock_priority

int

请求的 DEADLOCK_PRIORITY 设置。不可为空值。

row_count

bigint

已由此请求返回到客户端的行数。不可为空值。

prev_error

int

在执行请求期间发生的最后一个错误。不可为空值。

nest_level

int

正在对该请求执行的代码的嵌套级别。不可为空值。

granted_query_memory

int

为执行该请求的查询而分配的页数。不可为空值。

executing_managed_code

bit

指示此请求是否正在执行公共语言运行时对象,例如例程、类型和触发器。只要公共语言运行时对象在堆栈中,就会设置此值,甚至在从公共语言运行时运行 Transact-SQL 时,也会设置。不可为空值。

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

ms177648.note(zh-cn,SQL.90).gif注意:
如果用户拥有对服务器的 VIEW SERVER STATE 权限,用户将会查看 SQL Server 实例上的所有正在执行的会话;否则,用户将只会查看执行 sys.dm_exec_requests 的会话。

对于/应用关系

sys.dm_exec_sessions

sys.dm_exec_requests

session_id

一对

零或一对多

sys.dm_exec_requests

sys.dm_exec_sql_text(sql_handle)

CROSS APPLY

OUTER APPLY

零或一对

零或一

sys.dm_exec_requests

sys.dm_exec_query_plan(plan_handle)

CROSS APPLY

OUTER APPLY

零或一对

零或一

sys.dm_exec_requests

sys.dm_exec_cached_plans

plan_handle

零或一对

零或一

sys.dm_exec_requests

sys.dm_exec_plan_attributes(plan_handle)

CROSS APPLY

OUTER APPLY

零或一对

零或一

sys.dm_exec_requests

sys.databases

database_id

一对一

sys.dm_exec_requests

sys.database_principals

user_id =principal_id

一对一

sys.dm_exec_connections

sys.dm_exec_requests

connection_id

一对

零或一

sys.dm_exec_requests

sys.dm_tran_active_transactions

transaction_id

一对一

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
posted on 2010-03-11 22:40  巴山游子  阅读(3985)  评论(0编辑  收藏  举报