我有一个问题,看起来像是死锁的结果。我们正在寻找问题的根源,但同时我们想重新启动服务器并让客户继续使用。
现在每次启动程序时,它都会显示“SqlConnection不支持并行事务”。我们没有改变程序中的任何内容,它已经编译并在客户服务器上运行,但在“可能的死锁”情况之后,它无法再次联机。
我们有7个客户端(计算机)运行该程序,每个客户端都与本地服务器上的Web服务进行通信,而Web服务则与SQL服务器进行通信(与Web服务器相同的机器)。
我们已经重新启动了SQL服务器和IIS服务器,但由于其他重要服务正在服务器上运行,所以我们没有重新启动服务器,这是我们最后要做的事情。我们在管理选项卡中看不到任何锁或其他东西。
因此,我的问题是,为什么“SqlConnection不支持并行事务”错误会突然出现,而程序中没有更改任何内容,并且它仍然存在于SQL重新启动之间。
似乎它发生在程序启动时进行的第一个数据库请求。
如果您需要更多信息,请询问。我很困惑...
更多信息: 我认为我没有“长时间”运行的事务。场景通常是我有一个包含20-100行(ContractRows)的数据集,在该数据集上我会对tableAdapter进行更新。我还会遍历这些20-100行,并为其中的一些创建ad-hook-sql查询(例如,如果已租用的产品被标记为已退回,则在数据库中创建一个sql查询来将该产品标记为已退回)
所以我非常简化地做到了这一点:
现在每次启动程序时,它都会显示“SqlConnection不支持并行事务”。我们没有改变程序中的任何内容,它已经编译并在客户服务器上运行,但在“可能的死锁”情况之后,它无法再次联机。
我们有7个客户端(计算机)运行该程序,每个客户端都与本地服务器上的Web服务进行通信,而Web服务则与SQL服务器进行通信(与Web服务器相同的机器)。
我们已经重新启动了SQL服务器和IIS服务器,但由于其他重要服务正在服务器上运行,所以我们没有重新启动服务器,这是我们最后要做的事情。我们在管理选项卡中看不到任何锁或其他东西。
因此,我的问题是,为什么“SqlConnection不支持并行事务”错误会突然出现,而程序中没有更改任何内容,并且它仍然存在于SQL重新启动之间。
似乎它发生在程序启动时进行的第一个数据库请求。
如果您需要更多信息,请询问。我很困惑...
更多信息: 我认为我没有“长时间”运行的事务。场景通常是我有一个包含20-100行(ContractRows)的数据集,在该数据集上我会对tableAdapter进行更新。我还会遍历这些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服务器每天会“崩溃”4-5次,我想这可能是死锁引起的,但我没有足够的知识来找出原因,也缺少可以监视此问题的SQL专家。我只能重启SQL服务器,然后一切都正常了。有时候我还必须重启计算机。这真的很让我困扰(当然也让我的客户困扰)。
任何在瑞典(或全球任何英语国家)了解分析死锁或其他SQL问题知识渊博的人都可以联系我。我知道这不是联系网站,但我想抓住机会问这个问题,因为我已经没有其他选择了,我已经花了三天三夜优化客户端,以确保我们关闭连接并且不做太多愚蠢的事情,但没有成功。