浅谈 SQL Server 中的等待类型(Wait Type)

等待类型及说明如下表:
|

等待类型

|

说明

|
|--|--|--|
|

ASYNC_DISKPOOL_LOCK

|

当尝试同步并行的线程(执行创建或初始化文件等任务)时出现。

|
|

ASYNC_IO_COMPLETION

|

当某任务正在等待 I/O 完成时出现。

|
|

ASYNC_NETWORK_IO

|

当任务被阻止在网络之后时出现在网络写入中。

|
|

BACKUP

|

当任务作为备份处理的一部分被阻止时出现。

|
|

BACKUP_OPERATOR

|

当任务正在等待磁带装入时出现。若要查看磁带状态,请查询 sys.dm_io_backup_tapes。如果装入操作没有挂起,则该等待类型可能指示磁带机发生硬件问题。

|
|

BACKUPBUFFER

|

在备份任务等待数据或等待用来存储数据的缓冲区时发生。此类型不常见,只有当任务等待装入磁带时才会出现。

|
|

BACKUPIO

|

在备份任务等待数据或等待用来存储数据的缓冲区时发生。此类型不常见,只有当任务等待装入磁带时才会出现。

|
|

BACKUPTHREAD

|

当某任务正在等待备份任务完成时出现。等待时间可能较长,从几分钟到几个小时。如果被等待的任务正处于 I/O 进程中,则该类型不指示发生问题。

|
|

BAD_PAGE_PROCESS

|

当后台错误页记录器正在尝试避免每隔五秒以上的时间运行时出现。

|
|

BROKER_RECEIVE_WAITFOR

|

当 RECEIVE WAITFOR 正在等待时出现。如果没有准备接收的消息,则通常出现该状态。

|
|

BROKER_TRANSMITTER

|

当 SQL Server 2005 Service Broker 传输代码中出现非常短暂的等待时出现。

|
|

BROKER_SHUTDOWN

|

当按计划关闭 Service Broker 时出现。该状态出现的时间应当尽量短暂。

|
|

BROKER_MASTERSTART

|

当某任务正在等待 Service Broker 的主事件处理程序启动时出现。该状态出现的时间应当非常短暂。

|
|

BROKER_EVENTHANDLER

|

当某任务正在 Service Broker 的主事件处理程序中等待时出现。出现时间应该非常短暂。

|
|

BROKER_REGISTERALLENDPOINTS

|

在初始化 Service Broker 连接端点的过程中出现。出现时间应该非常短暂。

|
|

BROKER_INIT

|

当初始化每个活动数据库中的 Service Broker 时出现。该状态不应当频繁出现。

|
|

BUILTIN_HASHKEY_MUTEX

|

仅供内部使用。

|
|

CHKPT

|

在服务器启动时出现以通知检查点线程可以启动。

|
|

CLR_AUTO_EVENT

|

当某任务当前正在执行公共语言运行时 (CLR) 执行并且正在等待特殊的自动事件启动时出现。

|
|

CLR_CRST

|

当某任务当前正在执行 CLR 执行并且正在等待输入当前由另一项任务正在使用的任务的关键部分时出现。

|
|

CLR_MANUAL_EVENT

|

当某任务当前正在执行 CLR 执行并且正在等待特定手动事件启动时出现。

|
|

CLR_MONITOR

|

当某任务当前正在执行 CLR 执行并且正在等待获取用于监视器的锁时出现。

|
|

CLR_RWLOCK_READER

|

当某任务当前正在执行 CLR 执行并且正在等待读取器锁时出现。

|
|

CLR_RWLOCK_WRITER

|

当某任务当前正在执行 CLR 执行并且正在等待编写器锁时出现。

|
|

CLR_TASK_JOIN

|

当某任务当前正在执行 CLR 执行并且正在等待另一项任务结束时出现。当两任务之间具有联接时出现该等待状态。

|
|

CLR_SEMAPHORE

|

当某任务当前正在执行 CLR 执行并且正在等待信号量时出现。

|
|

CMEMTHREAD

|

当某任务正在等待线程安全内存对象时出现。当多项任务尝试分配来自同一个内存对象的内存而导致出现争用时,便可能延长等待时间。

|
|

CXPACKET

|

当尝试同步查询处理器交换迭代器时出现。如果针对该等待类型的争用成为问题时,可以考虑降低并行度。

|
|

DEADLOCK_ENUM_MUTEX

|

当死锁监视器和 sys.dm_os_waiting_tasks 尝试确保 SQL Server 不同时运行多个死锁搜索时出现。

|
|

DEADLOCK_TASK_SEARCH

|

当某任务正在等待内部死锁监视器同步时出现。对于该等待类型的事件,死锁监视器在大多数时间都处于空闲状态。

|
|

DISABLE_VERSIONING

|

当 SQL Server 轮询版本事务管理器,以查看最早的活动事务的时间戳是否晚于状态开始更改时的时间戳时出现。如果是,则所有在 ALTER DATABASE 语句运行之前启动的快照事务都已完成。当 SQL Server 通过 ALTER DATABASE 语句禁用版本控制时使用该等待状态。

|
|

DISKIO_SUSPEND

|

当某任务正在等待访问文件(外部备份处于活动状态)时出现。针对每个正在等待的用户进程报告该状态。每个用户进程大于五的计数可能指示外部备份需要太长时间才能完成。

|
|

DROPTEMP

|

当某任务在连接处于死锁状态的情况下进入睡眠时出现。该任务将在每次(指数化)重试删除操作前进行等待。

|
|

DTC

|

当某任务正在等待用于管理状态转换的事件时出现。该状态控制当 SQL Server 接收到 Microsoft 分布式事务处理协调器 (MS DTC) 服务不可用的通知之后执行 MS DTC 事务恢复的时间。该状态还说明在 SQL Server 启动了 MS DTC 事务提交并且 SQL Server 正在等待 MS DTC 提交完成时进行等待的任务。

|
|

DTC_ABORT_REQUEST

|

当 MS DTC 工作线程会话正在等待获得 MS DTC 事务的所有权时,在该会话中出现。当 MS DTC 拥有了事务后,该会话可以回滚事务。通常,该会话将等待另一个正在使用事务的会话。

|
|

DTC_RESOLVE

|

当恢复任务正在等待跨数据库事务中的 master 数据库以查询该事务的结果时出现。

|
|

DTC_STATE

|

当某任务正在等待对内部 MS DTC 全局状态对象的更改进行保护的事件时出现。该状态应当保持非常短的时间。

|
|

DTC_TMDOWN_REQUEST

|

当 SQL Server 接收到 MS DTC 服务不可用的通知时,在 MS DTC 工作线程会话中出现。首先,工作线程将等待 MS DTC 恢复进程启动。然后,工作线程等待获取其正在处理的分布式事务的结果。此过程可能一直执行,直到重新建立与 MS DTC 服务的连接。

|
|

DTC_WAITFOR_OUTCOME

|

当恢复任务等待 MS DTC 处于活动状态以启用准备好的事务的解决方法时出现。

|
|

DUMP_LOG_COORDINATOR

|

当主任务正在等待子任务生成数据时出现。该状态通常不会出现。长时间的等待指示出现意外的阻塞。应当对子任务进行调查。

|
|

ENABLE_VERSIONING

|

当 SQL Server 在声明数据库可以转换到 DBVER_ON 状态之前,等待该数据库中的所有更新事务完成时出现。当 SQL Server 通过 ALTER DATABASE 语句启用版本控制时使用该状态。

|
|

EXCHANGE

|

在同步查询处理器交换迭代器期间出现。很少发生。

|
|

EXECSYNC

|

在同步与交换迭代器无关的区域内的查询处理器期间出现。此类区域的示例包括位图、大型二进制对象 (LOB) 以及假脱机迭代器。LOB 可能经常使用该等待状态。位图和假脱机使用不应当导致争用。

|
|

FCB_REPLICA_READ

|

当同步快照(或 DBCC 创建的临时快照)稀疏文件的读取时出现。

|
|

FCB_REPLICA_WRITE

|

当同步快照(或 DBCC 创建的临时快照)稀疏文件的页推送或页请求时出现。

|
|

HTTP_ENDPOINT_COLLCREATE

|

在启动时出现以创建端点集合。该状态并非特定于 HTTP。

|
|

HTTP_ENUMERATION

|

在启动时出现,以枚举 HTTP 端点以启动 HTTP。

|
|

IMPPROV_IOWAIT

|

当 SQL Server 等待 Bulkload I/O 完成时出现。

|
|

IO_AUDIT_MUTEX

|

仅供内部使用。

|
|

LATCH_DT

|

针对分布式事务闩锁的闩锁等待。它不包括缓冲区闩锁或事务标记闩锁。

|
|

LATCH_EX

|

针对排他闩锁的闩锁等待。不包括缓冲区闩锁或事务标记闩锁。

|
|

LATCH_KP

|

针对保留闩锁的闩锁等待。不包括缓冲区闩锁或事务标记闩锁。

|
|

LATCH_NL

|

针对空闩锁的闩锁等待。不包括缓冲区闩锁或事务标记闩锁。

|
|

LATCH_SH

|

针对共享闩锁的闩锁等待。不包括缓冲区闩锁或事务标记闩锁。

|
|

LATCH_UP

|

针对更新闩锁的闩锁等待。不包括缓冲区闩锁或事务标记闩锁。

|
|

LAZYWRITER_SLEEP

|

当惰性编写器被挂起时出现。正在等待的后台任务所用时间的度量值。在查找用户阻隔点所时不要考虑该状态。

|
|

LCK_M_BU

|

当某任务正在等待获取大容量更新锁时出现。

|
|

LCK_M_IS

|

当某任务正在等待获取意向共享锁时出现。

|
|

LCK_M_IU

|

当某任务正在等待获取意向更新锁时出现。

|
|

LCK_M_IX

|

当某任务正在等待获取意向排他锁时出现。

|
|

LCK_M_RIn_NL

|

当某任务正在等待获取当前键值上的 NULL 锁以及当前键和上一个键之间的插入范围锁时出现。键上的 NULL 锁是指立即释放的锁。

|
|

LCK_M_RIn_S

|

当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的插入范围锁时出现。

|
|

LCK_M_RIn_U

|

任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的插入范围锁。

|
|

LCK_M_RIn_X

|

当某任务正在等待获取当前键值上的排他锁以及当前键和上一个键之间的插入范围锁时出现。

|
|

LCK_M_RS_S

|

当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的共享范围锁时出现。

|
|

LCK_M_RS_U

|

当某任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的更新范围锁时出现。

|
|

LCK_M_RX_S

|

当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的排他范围锁时出现。

|
|

LCK_M_RX_U

|

当某任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的排他范围锁时出现。

|
|

LCK_M_RX_X

|

当某任务正在等待获取当前键值上的排他锁以及当前键和上一个键之间的排他范围锁时出现。

|
|

LCK_M_S

|

当某任务正在等待获取共享锁时出现。

|
|

LCK_M_SCH_M

|

当某任务正在等待获取架构修改锁时出现。

|
|

LCK_M_SCH_S

|

当某任务正在等待获取架构共享锁时出现。

|
|

LCK_M_SIU

|

当某任务正在等待获取共享意向更新锁时出现。

|
|

LCK_M_SIX

|

当某任务正在等待获取共享意向排他锁时出现。

|
|

LCK_M_U

|

当某任务正在等待获取更新锁时出现。

|
|

LCK_M_UIX

|

当某任务正在等待获取更新意向排他锁时出现。

|
|

LCK_M_X

|

当某任务正在等待获取排他锁时出现。

|
|

DBMIRROR_SEND

|

当某任务正在等待清除网络层的通信积压以便能够发送消息时出现。指示通信层正在开始重载并影响数据库镜像数据吞吐量。Microsoft 支持策略不适用于 SQL Server 2005 的数据库镜像功能。根据默认设置,数据库镜像当前已被禁用,但通过使用跟踪标志 1400 作为启动参数可以启用该功能,该功能仅供评估使用。(有关跟踪标志的详细信息,请参阅跟踪标志 (Transact-SQL)。)不要在生产环境中使用数据库镜像,Microsoft 支持服务不支持使用数据库镜像的数据库或应用程序。在 SQL Server 2005 中包括数据库镜像文档仅供评估使用,SQL Server 2005 支持和升级文档策略不适用于数据库镜像文档。

|
|

DBMIRRORING_CMD

|

当某任务正在等待日志记录刷新到磁盘时出现。该等待状态应当保留较长的时间。

|
|

LOGBUFFER

|

当某任务正在等待日志缓冲区的空间以存储日志记录时出现。连续的高值可能指示日志设备无法跟上服务器生成的日志量。

|
|

LOGMGR

|

当某任务正在等待任何未完成的日志 I/O 在关闭日志之前完成时出现。

|
|

LOGMGR_FLUSH

|

仅供内部使用。

|
|

LOGMGR_RESERVE_APPEND

|

当某任务正在等待查看日志截断是否能释放日志空间以使该任务能写入新的日志记录时出现。

|
|

LOWFAIL_MEMMGR_QUEUE

|

当某任务正在从因内存不足而失败的队列中删除页时出现。

|
|

MSQL_DQ

|

当某任务正在等待分布式查询操作完成时出现。 使用该状态检测潜在的多个活动的结果集 (MARS) 应用程序死锁。该等待将在分布式查询调用完成时结束。

|
|

MSQL_XACT_MGR_MUTEX

|

当某任务正在等待获取会话事务管理器的所有权以执行会话级别事务操作时出现。互斥体用于同步同一个会话中不同线程的事务管理器对象的使用。

|
|

MSQL_XP

|

当某任务正在等待扩展存储过程结束时出现。SQL Server 使用该等待状态检测潜在的 MARS 应用程序死锁。该等待将在扩展存储过程调用结束时停止。

|
|

OLEDB

|

当 SQL Server 调用 Microsoft SQL Native Client OLEDB 访问接口时发生。该状态不用于同步。

|
|

PAGEIOLATCH_DT

|

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“破坏”模式。

|
|

PAGEIOLATCH_EX

|

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“独占”模式。

|
|

PAGEIOLATCH_KP

|

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“保持”模式。

|
|

PAGEIOLATCH_NL

|

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“空”模式。

|
|

PAGEIOLATCH_SH

|

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“共享”模式。

|
|

PAGEIOLATCH_UP

|

在任务等待 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“更新”模式。

|
|

PAGELATCH_DT

|

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“破坏”模式。

|
|

PAGELATCH_EX

|

在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“独占”模式。

|
|

PAGELATCH_KP

|

在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“保持”模式。

|
|

PAGELATCH_NL

|

在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“空”模式。

|
|

PAGELATCH_SH

|

在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“共享”模式。

|
|

PAGELATCH_UP

|

在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“更新”模式。

|
|

PRINT_ROLLBACK_PROGRESS

|

用于等待用户进程在已通过 ALTER DATABASE 终止子句完成转换的数据库中结束。有关详细信息,请参阅 ALTER DATABASE (Transact-SQL)。

|
|

PWAIT_QPJOB_WAITFOR_ABORT

|

指示异步统计信息自动更新在运行时通过调用 KILL 命令而取消。目前更新已完成,但是在终止线程消息协调完成之前一直于挂起状态。这是一个普通而少见的状态,应当非常短暂。正常情况下,该值不到一秒钟。

|
|

PWAIT_QPJOB_KILL

|

指示异步统计信息自动更新在开始运行时通过调用 KILL 命令而取消。终止线程处于挂起状态,等待它开始侦听 KILL 命令。正常情况下,该值不到一秒钟。

|
|

QRY_MEM_GRANT_INFO_MUTEX

|

当查询执行内存管理尝试控制对静态授予信息列表的访问时出现。该状态列出当前已批准的内存请求以及正在等待的内存请求的有关信息。该状态是一个简单的访问控制状态。该状态始终不应当等待较长的时间。如果未释放互斥体,则所有占用内存的新查询都将停止响应。

|
|

QUERY_NOTIFICATION_MGR_MUTEX

|

保护查询通知管理器中的垃圾收集队列。

|
|

QUERY_NOTIFICATION_SUBSCRIPTION_MUTEX

|

基于每个订阅控制事务的互斥体。这表示每个订阅具有一个互斥体并使用该互斥体更改其事务状态。

|
|

QUERY_NOTIFICATION_TABLE_MGR_MUTEX

|

仅供内部使用。

|
|

QUERY_NOTIFICATION_UNITTEST_MUTEX

|

仅供内部使用。

|
|

SQLTRACE_BUFFER_FLUSH

|

当某任务正在等待后台任务将跟踪缓冲区每隔四秒刷新到磁盘时出现

|

原文地址:https://www.cnblogs.com/ruishine/p/14339970.html