【问题标题】:Azure SqlException: Database on server is not currently availableAzure SqlException:服务器上的数据库当前不可用
【发布时间】:2014-04-21 08:13:31
【问题描述】:

我们的网站已经在 Azure 中运行了几个星期而没有出现此错误:

SqlException:服务器“服务器”上的数据库“数据库”当前不是 可用的。请稍后重试连接。如果问题 仍然存在,联系客户支持,并向他们提供会话 'guid' 的跟踪 ID。

终于有一天,活跃(并发)用户略高于 2K。这是我可以在 SO 中找到的the closest question。我们没有使用 EF,而是使用 Dapper。我不知道如何调试我们的应用程序以找出导致问题的原因,而且由于过去 2 天没有出现问题,因此更加困难。我绝对需要注意,我需要你们,任何提示,关于我应该调查的地方,我需要做些什么来确定问题的原因,并可能解决它。

【问题讨论】:

  • 这种情况偶尔会发生在我们身上——到目前为止我们一直忽略它。我猜这是 SQL Azure 端的一些临时维护过程。
  • @sharptooth 它多久出现一次?当它发生时,你有没有记下你有多少用户?维护,这是我告诉我的团队的可能原因之一,但我希望有人能证实这一点。并且至少半小时停机并不好,尤其是用户抱怨。
  • 半小时左右 - 通常是几秒钟。它可能每月发生一次,与应用程序活动无关。

标签: asp.net azure ado.net azure-sql-database


【解决方案1】:

听起来您需要通过某种瞬态故障处理机制来处理瞬态故障。这是询问类似问题的帖子: SQL Azure Database retry logic David 的回答与我们处理该问题所采取的方法相似。

这里是一些代码的另一个链接,它与 David 的代码和我们的解决方案类似,让您了解它。 http://www.getcodesamples.com/src/4A7E4E66/41D6FAD

当我们第一次迁移到 SQL Azure 时,我们也遇到了类似的问题,但是通过对瞬时连接问题实施退避重试逻辑,大多数情况下它会在几秒钟后恢复。

【讨论】:

【解决方案2】:

我们采用Azure Transient Fault Block 处理瞬态错误的路径,但这会导致更大的问题 - 即,如果您达到 SQL 连接限制 (easy to do),则只有 makes things worse 具有重试逻辑。

如果它每月只发生一次,我会保留它,并优雅地处理它在堆栈的更高位置。另一种方法是创建custom retry policy 以避免重试某些错误,但它仍然可能弊大于利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2011-06-15
    • 2022-09-30
    • 1970-01-01
    相关资源
    最近更新 更多