Azure数据库并发使用问题

mat*_*mmo 11 concurrency azure database-concurrency azure-sql-database

只是想通过大家来运行这个,看看是否有任何明智的想法,因为我已经用尽了所有的想法,经过一整天,晚上和早上的搜索.在并发使用(硒测试)时,我们遇到的问题总是围绕数据库连接,例如超时,丢弃/关闭连接,数据库服务器无法访问.

该问题似乎仅限于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:执行命令需要打开且可用的连接.连接的当前状态被破坏.

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

Jon*_*ers 5

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

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