带有 MSDTC 链接服务器更新的存储过程挂起 PREEMPTIVE_COM_QUERYINTERFACE 等待(事件 ID 4359)

Stored Proc with MSDTC Linked Server Update Hangs-On PREEMPTIVE_COM_QUERYINTERFACE Wait (with EventID 4359)

存储过程在事务中执行链接服务器更新。除了一个特定的客户端环境外,它适用于多个客户端环境。

发生的行为是通过 ASP.net UI 调用 SP,它会挂起,直到达到 30 秒的命令超时。 运行 sp_WhoIsActive 脚本显示 SP 卡在 wait_info of PREEMPTIVE_COM_QUERYINTERFACE 的 UPDATE LS 语句中。

奇怪的是,在UI中再次尝试操作时,在初始超时后,它又成功了。但是超时问题偶尔会再次弹出,但没有明确的模式。

由于等待事件发生的语句,似乎与MSDTC有关。它可能是权限或配置设置,因为在其他环境中,不会遇到此问题。但 MSDTC 似乎设置正确,因为有时执行成功。有没有人对这个 PREEMPTIVE_COM_QUERYINTERFACE 等待信息有经验?

本地和远程涉及的数据库都是 SQL Server 2008 R2 数据库,使用 SQL Native Client 10.0 作为 LS 对象。

更新: 我们检查了 Windows 应用程序日志和 SP 挂起的时间;有这个错误信息。

事件 ID 4359 MS DTC 无法与远程系统上的 MS DTC 通信。主系统上的 MS DTC 与辅助系统上的 MS DTC 建立了 RPC 绑定。但是,在超时期限到期之前,辅助系统没有创建到主 MS DTC 系统的反向 RPC 绑定。请确保两个系统之间存在网络连接。错误说明:

检查已经完成:

  1. MSDTC 配置(即允许入站、允许出站等)
  2. HKEY_CLASSES_ROOT两台机器的CID不一样

机器中安装了 Symantec Endpoint Protection,因此我们正在调查这是否是一个因素。

为此更新:

我们检查了两台机器的 Windows 应用程序日志,结果发现存在 MSDTC 错误事件 ID 4359。

“MS DTC 无法与远程系统上的 MS DTC 通信。主系统上的 MS DTC 与辅助系统上的 MS DTC 建立了 RPC 绑定。但是,在超时期限到期之前,辅助系统没有创建到主 MS DTC 系统的反向 RPC 绑定。请确保两个系统之间存在网络连接。错误说明:”

主 MSDTC 和辅助 MSDTC 之间似乎存在端口阻塞,我们怀疑这可能是由于安装了 Symantec Endpoint Protection。所以这只是一个需要解决的客户环境问题。