Microsoft SQL Server 2008 R2 中的 PREEMPTIVE_REENLIST 等待类型是什么

Joe*_*yes 4 sql-server sql-server-2008-r2 wait-types

这并不紧急,只是好奇。

题:

我今天试图对一个缓慢的服务器进行故障排除,我遇到了一个名为PREEMPTIVE_REENLIST. 我无法在任何地方找到此文档。TOADWORLD 似乎至少知道它存在,但没有任何实际信息。MSDN 搜索或 Stack Exchange 搜索中没有任何内容。除了 TOADWORLD 链接之外,Google 上没有任何内容。

只是想知道这里是否有人遇到过它并且知道它是怎么回事。谢谢。

平台:

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (X64) 2012 年 6 月 11 日 16:41:53 版权所有 (c) Microsoft Corporation 标准版(64 位),Windows NT 6.1(内部版本 7601:Service Pack 1)(管理程序) )(在 VMWare 上虚拟化的 Windows Server 2008 R2)

小智 5

这不是明确的证据,而只是我的观点,基于我从 PluralSight 课程中学到的关于等待统计数据的 Paul Randal。

PREMEPTIVE 等待表明 SQL Server 操作系统 (SQLOS) 必须将线程更改为抢占模式,以在操作系统级别处理 SQL Server 之外的某些内容。

现在,正如您已经确定的那样,这种类型的等待根本没有记录。您可以在DMV下的BOL 中看到一些记录,sys.dm_os_wait_stats但并不广泛。在大多数情况下,对操作系统的调用是通过 Windows API 调用进行的。所以我最终从课程中学到的是,如果你去掉那PREMEPTIVE部分,PREEMPTIVE_REENLIST你最终会得到正在使用的可能 API 的名称:REENLIST. 因此,如果您接受并开始在网络上搜索,您可以尝试推断出它的含义。

所以我的推论是我遇到了这篇MSDN 文章IResrouceManager::Reenlist还有其他关于类似命名方法的 MSDN 文章都讨论了TransactionManager. 引起我注意的不是内容,而是本文所在的 MSDN 部分:DTC 接口。所以你没有为你的服务器指定这个级别的设置,但我预感你正在使用分布式事务。这可能来自对其他实例/数据库的远程调用,或者如果您正在处理集群实例。如果您实际上从MS DTC Service 中阅读了一条语句,尽管它来自 SQL Server 2000,您可能会发现引起我注意的关键词:

然后可以指示运行 SQL Server 的一台或多台服务器加入分布式事务,并与 MS DTC 协调事务的正确完成

只是我的观点...