Azure数据库并发使用问题

时间:2012-09-25 13:41:58

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

只是想通过大家来管理这一点,看看是否有任何好主意,因为我在整整一天,一夜又一天的搜索后已经用尽了所有的想法。在并发使用(硒测试)时,我们遇到的问题总是以数据库连接为中心,例如:超时,删除/关闭连接,数据库服务器无法访问。

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

  1. Azure瞬态故障处理 - 我们有适当的重试逻辑 当SQL Azure服务本身存在临时问题时。
  2. 更改通信协议 - 我们已尝试过TCP和命名管道 我们遇到了同样的问题。
  3. 调整数据库连接超时间隔 - 我们尝试过增加 这无济于事。
  4. 添加多个活动结果集 - 我们已将此添加到 连接字符串无济于事。
  5. 连接状态检查每个查询 - 当我们返回时 DataContext我们检查它的连接并在必要时重新打开。
  6. 关闭连接池 - 我们也没有尝试过 成功。
  7. 改变了设计模式 - 我们甚至完成了实施的长度 工作单元设计模式,数据库连接所在的位置 在每个工作单位之后被解雇和处理但是这个 使用延迟加载在其他地方引发问题,将对象传入 方法,这将是一个太大的返工 点。

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

  9. 网站基础设施如下:

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

    非常感谢任何帮助。

    更新:我们将虚拟机大小提升至中等水平,所有这一切都意味着同一问题花费的时间更长。

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

      

    InvalidOperationException:执行命令需要打开且可用的连接。连接的当前状态已被破坏。

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

1 个答案:

答案 0 :(得分:5)

我之前遇到过这种问题。在我的情况下,它与实体框架ObjectContexts没有被正确处理,在最终太多的上下文被旋转并且网站被推翻之前。我们使用Entity Framework Profiler确定在抛出错误时有很多未闭合的ObjectContexts。

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