EntityCommandExecutionException:Azure SQL with Entity Framework缓慢并拒绝请求

时间:2017-12-11 15:53:51

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

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

  

执行命令定义时发生错误。见   内部异常细节。执行超时已过期。超时   在完成操作或服务器之前经过的时间段   没有回应。等待操作超时

显然,对数据库的请求已经超时,但它开始突然发生并且之前没有发生过。在最近几天,我们看到平均响应时间也增加了: Azure SQL Response time 最佳响应时间并不是那么快,因为它们需要进行一些改进和优化,但您可以看到明显的增加。

我们的移动应用程序在启动时会从我们的API请求大量信息并提出一些似乎一起失败的请求,几分钟后这些请求单独运行就可以了。

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

1 个答案:

答案 0 :(得分:3)

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

这是您的数据库层和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 DTU cap alert

在我看来,Azure应该自动创建这个警报,我确定它不仅仅是因为我被烧毁了!

相关问题