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

时间:2019-06-14 11:05:48

标签: sql-server msdtc

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

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

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

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

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

更新: 我们检查了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,因此我们正在调查是否可能是一个因素。

1 个答案:

答案 0 :(得分:0)

对此进行更新:

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

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

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