存储过程在事务中执行链接服务器更新。除一个特定的客户端环境外,它适用于多种客户端环境。
发生的行为是通过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绑定。请确保两个系统之间存在网络连接。错误明细:
检查已完成:
计算机中安装了Symantec Endpoint Protection,因此我们正在调查是否可能是一个因素。
答案 0 :(得分:0)
对此进行更新:
我们检查了两台计算机上的Windows应用程序日志,结果发现存在MSDTC错误事件ID4359。
“ MS DTC无法与远程系统上的MS DTC通信。主系统上的MS DTC与辅助系统上的MS DTC建立了RPC绑定。但是,辅助系统没有在超时期限到期之前创建与主MS DTC系统的反向RPC绑定。请确保两个系统之间存在网络连接。错误明细:”
主要MSDTC和辅助MSDTC之间似乎存在端口阻塞,我们怀疑这可能是由于安装了Symantec Endpoint Protection引起的。因此,这只是一个解决客户环境的问题。