【问题标题】:Linq-To-Sql and MARS woes - A severe error occurred on the current command. The results, if any, should be discardedLinq-To-Sql 和 MARS 问题 - 当前命令出现严重错误。结果,如果有的话,应该被丢弃
【发布时间】:2013-02-19 21:43:17
【问题描述】:

我们在 CodePlex 上基于 Kigg 项目的设计建立了一个网站:

http://kigg.codeplex.com/releases/view/28200

基本上,代码使用存储库模式,以及基于 Linq-To-Sql 的存储库实现。完整的源代码可以在上面的链接中找到。

该网站已经运行了一段时间,大约一年前,我们开始收到如下错误:

  • 已经有一个打开的 DataReader 与此命令关联,必须先关闭它。
  • ExecuteNonQuery 需要打开且可用的连接。连接的当前状态为关闭。

根据我的记忆,这些是我能找到的最接近的错误示例。当网站流量开始回升时,这些错误开始发生。在将头撞到墙上后,我发现假设问题出在 Linq-To-Sql 内部,以及我们如何使用同一连接在单个 Web 请求中调用多个命令。 p>

最后,我发现了 MARS(多个活动结果集)并将其添加到数据上下文的连接字符串中,就像魔术一样,我所有的错误都消失了。

现在,快进大约 1 年,网站流量大幅增加。每周左右,我都会在 SQL Server 中收到一条错误消息:

当前命令发生严重错误。结果,如果有的话,应该丢弃

在此错误之后,我立即在错误日志中收到数百到数千个 InvalidCastException 错误。基本上,每次调用 Linq-To-Sql 数据上下文时都会出现此错误。只有在我重新启动 Web 服务器后,这些错误才会清除。

我在 Micosoft 支持网站上阅读了一篇描述我的问题(减去 InvalidCastException 错误)的帖子,并指出解决方案是,如果我要使用 MARS,我也应该使用 Asncronous Processing=True。我试过这个,但它也没有解决我的问题。

不确定从这里去哪里。希望这里有人之前已经看到并解决了这个问题。

【问题讨论】:

  • @AaronBertrand,谢谢。版本为 Microsoft SQL Server 2012 - 11.0.2218.0 (X64)
  • 您可以先考虑Service Pack 1,然后再考虑Cumulative Update 2。许多这些“严重错误”问题都被悄悄地修复了(据我所知,这个问题是非悄悄地修复的,但我还没有审查所有公开的修复程序)。此外,我还没有听到很多 MARS 的成功案例。你确定你需要它吗?
  • 我发现问题是继承了 Linq-To-Sql 不,不是。尝试创建多个结果集是代码中的错误。
  • @RemusRusanu,有趣的观点......我从来没有这样想过......;)为了确认我们在谈论同样的事情,这是一个命令(通过 id 查找用户)与另一个命令(列出所有用户)同时在 same 连接上执行?
  • A severe error occurred on the current command:用 CSS 打开一个支持案例,他们有办法调查它。不要假设是同一个问题,因为所有服务器转储都显示相同的客户端错误消息。对于开放的结果集问题,找到根本原因并解决它,不要猜测。

标签: sql-server linq-to-sql sql-server-mars kigg


【解决方案1】:

我也有同样的问题。一旦错误开始,我必须重新启动 IIS 应用程序池来修复。

尽管尝试了许多不同的场景,包括多线程、保持连接打开等,我仍然无法在 dev 中重现该错误。

我确实有一个可能的线索是,服务器事件日志中的错误是应用程序池的 OutOfMemoryException。也许这是虚假 SQL Datareader 错误(其他地方的内存泄漏)的根本原因。虽然我再次无法在开发中重现这一点。

显然,如果您使用的是 64 位操作系统,那么这可能不是您的原因。

【讨论】:

  • 感谢您的建议。我能够使用Grinder 重现该问题。正如我所提到的,MARS 是我所有问题的根本原因。
【解决方案2】:

因此,经过多次重构和重新架构,我们发现问题一直是 MARS(多活动结果集)本身。不知道为什么或究竟发生了什么,但 MARS 不知何故将结果集弄混了,直到网络应用重新启动后才会恢复。

我们移除了 MARS,错误停止了。

如果我没记错的话,我们添加了 MARS 来解决连接/命令已经使用 LinqToSql 关闭并且我们尝试访问尚未加载的对象图的问题。如果没有 MARS,我们会得到一个错误。但是当我们添加 MARS 时,它似乎并不关心它。这确实是一个很好的例子,说明我们并没有真正理解自己在做什么,我们从中学到了一些宝贵(且昂贵)的教训。

希望这对经历过这种情况的其他人有所帮助。

感谢所有贡献他们的 cmets 和答案的人。

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2011-02-27
    相关资源
    最近更新 更多