【问题标题】:Azure database concurrent usage issuesAzure 数据库并发使用问题
【发布时间】:2012-09-17 01:06:06
【问题描述】:

只是想由大家运行一下,看看是否有任何好的想法,因为经过一整天、一夜和一早的搜索,我已经用尽了所有的想法。在并发使用(硒测试)时,我们遇到的问题总是围绕数据库连接,例如超时、断开/关闭的连接、无法访问数据库服务器。

这个问题似乎仅限于 Azure,因为即使在指向同一个数据库 (SQL Azure) 的相同代码上运行相同的 selenium 测试时,我们还没有在本地遇到这个问题,所以它会指出它是一些SQL Azure 中的出站数据库连接问题。到目前为止,我们已经尝试了以下方法:

  1. Azure 瞬态故障处理 – 我们为 当 SQL Azure 服务本身出现临时问题时。
  2. 更改通信协议 - 我们尝试了 TCP 和命名管道 我们遇到了同样的问题。
  3. 调整数据库连接超时间隔 - 我们尝试增加 这无济于事。
  4. 添加多个活动结果集 – 我们已将其添加到 连接字符串无济于事。
  5. 对每个查询进行连接状态检查 – 当我们返回 我们检查 DataContext 的连接并在必要时重新打开。
  6. 关闭连接池 - 我们也尝试过 成功。
  7. 改变了设计模式——我们甚至竭尽全力实现 工作单元设计模式,其中数据库连接位于 在每个工作单元之后被解雇和处理,但这 在其他地方导致延迟加载问题,将对象传递到 方法,而且在这方面的返工太重了 点。

  8. 更改角色大小 - 我能想到的最后一件事就是提高 Windows 中存在任何隐式连接限制时的角色大小 Azure——目前正在部署,所以仍有一半的机会 可能有用!

网站基础架构如下:

  • DataContext 类(扩展 DbContext),它是 Code First EF 上下文。
  • BusinessLayer 类包含一个私有的非静态 DataContext。 DataContext 是注入到每个 Manager/Helper 类中的构造函数。
  • BusinessLayerService 类包含一个公共的、线程静态的 BusinessLayer 实例。
  • MVC 站点使用 BusinessLayerService.Instance 访问管理器 查询和更新已传递的 DataContext 的类。

任何帮助将不胜感激。

更新:我们将 VM 大小提高到中等,这意味着同样的问题需要更长的时间才会发生。

当问题开始出现时,一名团队成员注意到发生了以下异常:

InvalidOperationException:命令的执行需要一个打开且可用的连接。连接的当前状态已断开。

每当数据库被击中时就会发生这种情况(不特定于某个代码区域)。

【问题讨论】:

  • 您是否尝试过使用经典的 ADO.Net 方法而不是 EF?有人告诉我,在使用 SQL Azure 时,人们使用 EF 的问题比使用 ADO.Net 的问题更多。
  • @GauravMantri 问题是,这个和我们已经在野外已经拥有的各种其他项目都使用 EF,因此切换到 ADO.NET 将是一个既耗时又昂贵的过程 :)
  • 您使用的实例大小是多少?请记住,网络带宽也受到实例大小的限制,因此小型实例只有 ~100Mb。
  • 我要做的一件事是增强瞬态故障处理框架 (TFHF) 的使用。默认情况下,它只使用/处理数据库级故障。但是您还需要考虑其他故障,例如负载均衡器错误。例如,您可能会收到 SocketIO 错误,这取决于错误本身可能是一种限制形式或需要重试的简单网络错误。所以我想说确保您查看实际的异常并确定是否应将它们添加到 TFHF。
  • @mattytommo This 可能会有所帮助

标签: azure concurrency azure-sql-database database-concurrency


【解决方案1】:

我以前遇到过这种问题。在我的情况下,这与 Entity Framework ObjectContexts 没有被正确处理有关,最终太多的上下文被启动并且网站被推翻了。我们使用 Entity Framework Profiler 确定在抛出错误时有很多未关闭的 ObjectContext。

迁移到工作单元设计模式(或类似模式)对我们来说是不可行的,因为它需要重写业务层,因此,我们通过在每个页面请求后手动关闭 ObjectContexts 来解决这个问题。我们采用了在 Global.asax 的 End Request 事件中手动处理上下文的方法,但是,其他有效的方法是将上下文存储在 HttpContext 中或使用“每个请求”实现 IoC 容器(例如 Castle Windsor) “生活方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多