只是想让大家运行一下,看看是否有任何明智的想法,因为在整整一天,搜索的夜晚和早晨之后,我已经用尽了所有想法。在并发使用情况下(硒测试),我们遇到的问题总是集中于数据库连接,例如,超时,掉线/关闭连接,数据库服务器无法访问。Azure数据库并发使用问题
该问题似乎仅限于Azure,因为即使在指向同一数据库的相同代码(SQL Azure)上运行相同的Selenium测试,我们仍未在本地遇到问题,因此它会指向它SQL Azure中出站数据库连接的一些问题。到目前为止,我们已经试过如下:
- 天青的瞬态故障处理 - 我们已制订了重试逻辑 时没有与SQL Azure的服务本身就是一个暂时性的问题。
- 更改通信协议 - 我们尝试了TCP和命名管道 ,我们遇到了同样的问题。
- 调整数据库连接超时间隔 - 我们试过增加 这个无济于事。
- 添加多个活动结果集 - 我们已将此添加到 连接字符串中无济于事。
- 连接状态检查每个查询 - 当我们返回 DataContext时,我们检查它的连接并在必要时重新打开。
- 关闭连接池 - 我们也试图在没有 的情况下成功。
更改设计模式 - 我们甚至去实现 工作的设计模式,在数据库连接是 被解雇了和工作的每一个单位后处置的单位的长度,但这个 懒加载造成的问题在别处,将对象传入 方法中,并且在此 点处进行的返工太大。
更改角色大小 - 我想尝试的最后一件事是到了 作用大小的在Windows Azure的任何隐含的连接限制的情况下 - 这是目前正在部署所以还是有一半的机会就 可能工作!
站点基础设施如下:
- DataContext类(延伸的DbContext),它是一个代码优先EF 上下文。
- BusinessLayer类包含一个私有的非静态DataContext。 DataContext是注入到每个Manager/Helper类中的构造函数。
- BusinessLayerService类包含一个公共的线程静态 BusinessLayer实例。
- MVC站点使用BusinessLayerService.Instance访问经理 类,该类查询和更新已传递的DataContext。
任何帮助将不胜感激。
更新:我们将虚拟机大小调高至中等,它所做的只是意味着同样的问题需要更长的时间才能发生。
当问题开始发生的历史,一个团队成员指出下列异常发生:
InvalidOperationException异常:该命令的执行需要一个开放和可用的连接。连接的当前状态已中断。
只要数据库被击中(不是特定于某个特定的代码区域),就会发生这种情况。
优秀的问题。 +1 –
您是否尝试过使用经典的ADO.Net方法而不是EF?在使用SQL Azure时,有人告诉我们人们在使用EF时遇到了比ADO.Net更多的问题。 –
@GauravMantri问题是,这个和其他各种项目我们已经在野外都使用EF,所以切换到ADO.NET将是一个耗时且成本高昂的过程:) – mattytommo