SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(上)

1. 简介

sys.dm_os_waiting_tasks是SqlServer的一个性能监控视图,可以显示当前正在等待或者阻塞的任务。这个视图提供了一些非常有用的信息,比如等待锁的数量以及等待锁的类型等。在本文中,我们将更加详细地介绍这个视图,并且解释它的一些具体使用方法。

2. 等待任务的类型

2.1 等待类型

在sys.dm_os_waiting_tasks视图中,有一个wait_type列,它可以告诉我们任务正在等待的是什么。下面是一些常见的等待类型:

ASYNC_NETWORK_IO: 表示任务正在等待网络操作完成

LCK_*: 表示任务正在等待锁

IO_COMPLETION: 表示任务正在等待I/O操作完成

WAITFOR: 表示任务正在等待WAITFOR延迟完成

2.2 等待资源

wait_resource列可以告诉我们任务正在等待的具体资源。下面是一些常见的等待资源:

PAGE: 等待数据库页

KEY: 等待聚集索引或非聚集索引的键

RID: 等待堆的行标识符

OBJECT: 等待表、视图或存储过程等数据库对象

3. 使用sys.dm_os_waiting_tasks

3.1 查看等待任务的数量

下面的代码可以让我们查看当前活动会话中等待任务的数量:

SELECT COUNT(*) as waiting_tasks_count

FROM sys.dm_os_waiting_tasks

执行这条语句之后,我们就可以得到一个数字,它告诉我们当前活动会话中等待任务的数量。

3.2 查看等待任务的详细信息

下面的代码可以让我们查看当前活动会话中的等待任务,并且可以了解任务的等待类型和等待资源:

SELECT session_id, wait_type, wait_resource

FROM sys.dm_os_waiting_tasks

通过这个查询,我们可以得到当前活动会话中等待任务的详细信息。

3.3 查看等待锁的数量

下面的代码可以让我们查看当前活动会话中等待锁的数量:

SELECT COUNT(*) as waiting_locks_count

FROM sys.dm_tran_locks

WHERE request_session_id IN (

SELECT session_id

FROM sys.dm_os_waiting_tasks

)

执行这个查询可以让我们获得等待锁的数量。

3.4 查看等待锁的详细信息

下面的代码可以让我们查看当前活动会话中正在等待锁的详细信息:

SELECT

L.request_session_id AS SPID,

DB_NAME(L.resource_database_id) AS DatabaseName,

OBJECT_NAME(L.resource_associated_entity_id) AS LockedObjectName,

L.resource_type AS LockedResource,

L.request_mode AS LockType,

ST.text AS SqlStatementText,

ES.login_name AS LoginName,

ES.host_name AS HostName,

TST.is_user_transaction as IsUserTransaction,

AT.name as TransactionName,

CN.auth_scheme as AuthenticationMethod,

L.request_status AS RequestStatus

FROM sys.dm_tran_locks L

JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id

JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id

JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id

JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id

CROSS APPLY sys.dm_exec_sql_text(CN.most_recent_sql_handle) AS ST

WHERE resource_database_id = DB_ID()

ORDER BY L.request_session_id

通过这个查询,我们可以了解当前活动会话中正在等待锁的详细信息,包括正在等待的对象、锁类型和锁模式等。

4. 结论

sys.dm_os_waiting_tasks是SqlServer中非常有用的一个监控视图,通过这个视图,我们可以查看当前正在等待或者阻塞的任务,包括等待锁、等待I/O操作、等待网络操作等。我们可以通过sys.dm_os_waiting_tasks视图了解任务正在等待的具体资源,以及任务正在等待的数量。通过这些信息,我们可以更好地监控SqlServer服务器的性能,并且针对性地进行调优。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签