gpt4 book ai didi

Azure 数据库并发使用问题

转载 作者:行者123 更新时间:2023-12-04 02:21:30 24 4
gpt4 key购买 nike

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

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

  1. Azure transient 故障处理 – 我们为以下问题准备了重试逻辑:当 SQL Azure 服务本身出现临时问题时。
  2. 更改通信协议(protocol) - 我们尝试过 TCP 和命名管道我们两者都遇到了同样的问题。
  3. 调整数据库连接超时间隔 - 我们尝试增加这没有用。
  4. 添加多个事件结果集 - 我们已将其添加到连接字符串无济于事。
  5. 每个查询的连接状态检查 – 当我们返回我们检查 DataContext 的连接并在必要时重新打开。
  6. 关闭连接池 - 我们也尝试过这样做,但没有成功。
  7. 改变了设计模式——我们甚至不遗余力地实现工作单元设计模式,其中数据库连接在每个工作单元之后都会被启动并处理掉,但是这个延迟加载、将对象传递到其他地方引起了问题方法,这方面的返工量太大点。

  8. 更改角色大小 – 我最不想尝试的就是增加角色大小Windows 中存在任何隐式连接限制时的角色大小Azure – 目前正在部署,因此仍有一半的机会可能会起作用!

站点基础架构如下:

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

任何帮助将不胜感激。

更新:我们将虚拟机大小提高到“中”,这意味着同样的问题需要更长时间才能发生。

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

InvalidOperationException: Execution of the command requires an open and available connection. The connection's current state is broken.

只要数据库受到攻击(不特定于特定的代码区域),就会开始发生这种情况。

最佳答案

我以前也遇到过这样的问题。就我而言,这与 Entity Framework ObjectContext 没有得到正确处理有关,最终导致太多上下文被启动,导致网站崩溃。我们使用 Entity Framework Profiler 发现,在抛出错误时存在大量未关闭的 ObjectContext。

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

关于Azure 数据库并发使用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12584227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com