奇怪的SQL2005问题。 “SqlConnection不支持并行事务”

问题描述:

我有一个问题,看起来像是死锁情况的结果。 Whe正在寻找问题的根源,但同时我们希望重新启动服务器并让客户开始工作。奇怪的SQL2005问题。 “SqlConnection不支持并行事务”

现在我们每次启动程序时都会说“SqlConnection不支持并行事务”。我们没有改变程序中的任何内容,它的编译和客户服务器上的内容,但是在“可能发生死锁”之后,它想再次上网。

我们有7个运行该程序的客户端(计算机),每个客户端正在与本地服务器上的web服务通信,并且web服务正在与sql-server(与web服务器相同的机器)通信。

我们重新启动了sql-server和iis-server,但没有重启服务器,因为服务器上运行着其他重要的服务,所以它是我们做的最后一件事。 我们可以在管理选项卡中找不到任何锁或锁。

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

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

如果您需要更多信息,请查询。我感到困惑......

更多信息: 我不认为我有“长期”运行交易。该场景通常是我有一个包含20-100行(ContractRows)的数据集,该数据集在tableAdapter上执行.Update。我也循环通过那些20-100行,并为他们中的一些创建ad-hook-sql-querys(例如,如果租用的产品被标记为返回,我创建一个sql-query来标记数据库中返回的产品)

所以我这样做很简单:

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() 

然后Im做取决于它是否顺利或者不提交或回滚。

编辑:没有任何答案已经解决了这个问题,但我会感谢你的好麻烦指针。

“SqlConnection不支持并行事务”突然消失,现在SQL服务器每天只有4-5次“下降”,我想它是一个死锁,但我没有找到正确的知识来寻找并且现在可以为我监视这个问题的sql专家很短。我只是重新启动sql服务器,一切都运作。 10次​​之一,我也必须重新启动计算机。它真的让我烦恼(当然还有我的客户)。

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

+0

原谅我的无知 - 我是一个Java人 - 但它似乎是通过将它们连接在一起并用CRLF分隔来执行这些SQL语句中的每一个。正确?在Java中,我会一起批量更新。连接会发生什么?什么时候关闭? – duffymo 2009-01-02 17:19:35

+0

我将commot/rollback/dispose添加到了我的简化示例中。 objData.ExecuteQuery是一个将sql作为SQLcommand执行的函数。 – Stefan 2009-01-02 17:34:27

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

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

你应该检查你的代码,并确保你只是打开一个连接,然后在你完成时处置它(并且通过使用using语句来确保你关闭连接) ,因为看起来你正在某处开放一个。

你的看起来并不是一个不寻常的问题。当我将错误字符串粘贴到查询框中时,Google发现了很多点击。

阅读过去的答案,听起来好像它与交易不正确或隔离级别有关。

连接持续多久?你有长期交易吗?

+0

谢谢,我将讨论事务的隔离级别并确定它可以获得什么。 – Stefan 2009-01-03 15:34:24

你有没有在某处开启implicit transactions,以便有些交易你不会期望它们?你是否打开Activity Monitor来查看是否有任何意外事务?

+0

谢谢,我检查是否是这种情况。我可以假设我的SPID在使用后很长时间都在“等待”或“睡觉”,但我想它是一种混合。 – Stefan 2009-01-03 15:35:43

您是否尝试过对事务日志进行备份?如果我能够正确记住以前的相似经历,那也可以清除它。

+0

我没有。我试试这个tomorow并在这里报告结果。 谢谢。 – Stefan 2009-01-06 02:37:24