【问题标题】:Disadvantages of MARS (Multiple Active Result Sets)?MARS(多个活动结果集)的缺点?
【发布时间】:2008-12-17 12:49:04
【问题描述】:

有人知道 MARS(多活动结果集)的缺点吗?有谁知道为什么应该避免使用 MARS,例如光标比 MARS 更有用的情况。

【问题讨论】:

    标签: sql-server-2005 sql-server-mars


    【解决方案1】:

    显然至少有两个已知的(潜在的)缺点(来自这个(1)Team blog):

    1. 显然,这可能会导致未设计为针对启用 MARS 的设计运行的任何遗留系统的潜在问题 - “为在非 MARS 世界中运行而优化的现有代码在运行时可能会出现轻微的性能下降- 用 MARS 修改”

    2. “使用 MARS,您可以将多个多语句批次发送到服务器。服务器将交错执行此类批处理,这意味着如果批处理通过 SET 或 USE 语句更改服务器状态,或者使用 TSQL 事务管理语句(BEGIN TRAN、COMMIT、ROLLBACK),您和服务器都会感到困惑关于你的实际意图是什么。”

    我还没有尝试启用 MARS 的设计,但在我当前的项目中我已经非常接近这样做了。我们在竞争(有时是依赖)查询操作(例如从活动记录集正在执行的同一数据库中延迟加载配置数据)时遇到了一个小问题。

    MSDN 网站(2) here上有更多信息

    [(1)https://web.archive.org/web/20190911155929/https://blogs.msdn.microsoft.com/sqlnativeclient/2006/09/27/using-mars-with-sql-native-client/]
    [(2)http://msdn.microsoft.com/en-us/library/ms131686.aspx]

    【讨论】:

    • 在应用 @RobS 出色的解决方案之前,我会先阅读这篇文章,以确保您无法使用以下解决方案解决此问题:devproconnections.com/development/… 或将 .ToList() 添加到您的末尾DB调用,解决了我的问题。顺便说一句,感谢 RobS 的建议,MARS 将来会派上用场。 :)
    【解决方案2】:
    • 与一次连接一个连接相比,它占用的服务器资源略多。
    • 您必须运行 SQL Server 2005 或更高版本。所以这可能是遗留(ack!)环境中的一个问题。

    【讨论】:

    • 你可以使用 SqlTransaction 就好了。
    • “稍微多一点服务器资源”是多少?你能估计一下内存或CPU吗?我对此感兴趣主要是因为我在 Azure 环境中,资源与服务器成本成正比。
    • @MathiasLykkegaardLorenzen 你有没有找到问题的答案?
    【解决方案3】:

    取决于什么?没有真正的缺点。

    它们不支持事务保存点。但我不认为这是一个缺点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多