我遇到的问题似乎是死锁情况造成的。现在正在寻找问题的根源,但同时我们想重新启动服务器并让客户继续运行。

现在每次我们启动程序时它都会说“SqlConnection 不支持并行事务”。我们没有对程序、其编译和客户服务器上的任何内容进行更改,但在“可能的死锁”情况之后,它想要再次上线。

我们有 7 个客户端(计算机)运行该程序,每个客户端都与本地服务器上的 Web 服务通信,而 Web 服务与 sql 服务器(与 Web 服务器同一台机器)通信。

我们已经重新启动了 sql-server 和 iis-server,但没有重新启动服务器,因为服务器上正在运行其他重要服务,因此这是我们做的最后一件事。我们在管理选项卡中看不到锁或任何东西。

所以我的问题是,为什么“SqlConnection 不支持并行事务”错误从一个时间到另一个时间而没有更改程序中的任何内容,并且它仍然存在于 sql-restart 之间。

看起来它发生在程序启动时执行的第一个数据库请求时。

如果您需要更多信息,请询问。我很困惑...

更多信息:我不认为我有“长时间”运行的交易。通常情况是,我有一个包含 20-100 行 (ContractRows) 的数据集,我将在 tableAdapter 上执行 .Update。我还循环遍历这 20-100 行,对于其中一些行,我将创建 ad-hook-sql 查询(例如,如果租用的产品被标记为已返回,我会创建一个 sql 查询来将产品标记为在数据库中返回)

所以我这样做非常简单:

Create objTransactionObject
Create objtableadapter (objTransactionObject)
for each row in contractDS.contractrows
  if row.isreturned then
    strSQL &= "update product set instock=1 where prodid=" & row.productid & vbcrlf
 End if
next
objtableadapter.update(contractDS)
objData.ExecuteQuery(strSQL, objTransactionObject)    
if succsesfull 
  objtransactionobject.commit
else
  objtransactionobject.rollback
end if
objTran.Dispose()

然后我根据它是否顺利进行提交或回滚。

编辑:所有答案都没有解决问题,但我会感谢您提供的良好的故障排除指示。

“SqlConnection 不支持并行事务”突然消失,现在 sql-server 每天“宕机”4-5 次,我猜这是一个死锁,但我没有正确的知识来找出答案并且很短关于 sql 专家,他们现在可以为我监控这一点。我只是重新启动 sql-server,一切又恢复正常了。我还必须重新启动计算机 10 次中的 1 次。这真的很困扰我(当然还有我的客户)。

任何认识某人的人 好的 在瑞典(或世界各地,英语)分析死锁问题或其他 SQL 问题的知识可以免费与我联系。我知道这不是一个联系网站,但我有机会问这个问题,因为我已经没有选择了,我花了三天三夜优化客户端,以确保我们关闭连接并且不会在那里做太多愚蠢的事情。没有运气。

有帮助吗?

解决方案

您似乎正在共享连接并在同一个打开的连接上创建新事务(这是您看到的异常的并行部分)。

您的示例似乎支持这一点,因为您没有提及如何获取其中的连接。

您应该检查您的代码,并确保您只打开一个连接,然后在完成后将其丢弃(并且无论如何,使用 using 语句来确保关闭连接),就像看起来的那样就像你在某个地方留下一个空着一样。

其他提示

你的问题似乎并不罕见。当我将您的错误字符串粘贴到查询框中时,Google 发现了很多点击。

阅读过去的答案,听起来这与不正确的交错事务或隔离级别有关。

连接保持打开状态多长时间?您有长期运行的交易吗?

你有 隐性交易 在某处打开,以便出现一些您意想不到的交易?您是否打开“活动监视器”查看是否有任何意外事务?

您是否尝试过备份事务日志?如果我正确地记得以前的类似经历,这也可能会清除它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top