【问题标题】:EntityCommandExecutionException: Azure SQL with Entity Framework slow and rejecting requestsEntityCommandExecutionException:带有实体框架的 Azure SQL 缓慢并拒绝请求
【发布时间】:2018-05-25 04:38:03
【问题描述】:

在过去的几天里,我们开始收到由 Entity Framework 与我们的 Azure SQL 数据库通信引发的间歇性异常。它抛出的异常与我们的代码特别相关,但消息是:

执行命令定义时出错。见 有关详细信息的内部异常。执行超时已过期。超时 在操作完成之前经过的时间段或服务器处于 没有响应。等待操作超时

很明显,对数据库的请求已经超时,但它突然开始发生并且以前没有发生过。最近几天,我们发现平均响应时间也有所增加: 最佳响应时间并没有那么快,因为它们需要一些细化和优化,但您可以看到显着增加。

我们的移动应用程序在启动时从我们的 API 请求大量信息,并发出许多请求,这些请求似乎都失败了,几分钟后单独处理这些请求就可以了。

关于这里可能发生的事情有什么想法吗? Azure 门户中没有错误,除了我们的 API 响应速度比正常情况慢的通知(我们知道!)

【问题讨论】:

    标签: sql-server entity-framework azure azure-sql-database


    【解决方案1】:

    令人讨厌的是,这是我第二次被这个问题所困扰,所以值得发帖。

    这是您的数据库层和 Azure 为您提供的 DTU 限制的结果。

    DTU 是衡量服务层性能的单位,是多个数据库特征的汇总。每个服务层都有一定数量的 DTU 分配给它,作为比较一个层与另一个层的性能水平的简单方法。 来自:Azure SQL Database "DTU percentage" metric

    关于发生了什么的线索可以在here找到:

    当您的工作负载超过任何这些资源的数量时,您的吞吐量会受到限制 - 导致性能下降和超时。

    我们使用的是基本层数据库,因此我们的限制是 5 DTU,当应用启动并达到此上限时,我们一次请求大量数据(诚然太多)。 Azure SQl 限制了我们的查询,减慢了一些查询并拒绝了其他查询。之前记得类似的事情,我曾在 Azure 门户中查看过 DTU 图表,但我一定是在查看更长的时间尺度,因此对我来说隐藏了使用量的大峰值。

    目前,我们通过将 Azure 数据库层和 DTU 限制从 5 增加到 20(4 倍性能)来解决这个问题,从而停止所有异常和失败的请求。

    由于 EntityFramework 提供的模糊异常和缓慢的请求,这是一个特别烦人的问题。将来 Azure SQL 最好包含一些有关 DTU 上限的信息。

    我们为防止这种情况添加的另一件事是,如果我们的 DTU 使用率再次超过 80%,它将在未来通知我们。请参阅 Azure 门户 > AzureSQL 数据库 > 监控 > 警报规则。

    我认为Azure应该自动创建这个警报,我敢肯定不会只有我被这个烧毁了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 2017-04-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      相关资源
      最近更新 更多