SQL Azure上突然出现大量等待操作超时问题

时间:2015-08-09 14:08:50

标签: c# entity-framework azure azure-sql-database

两天前,没有代码更改或更改数据库,我没有得到很多(每5分钟左右)错误The wait operation timed out错误,两个不同的下划线完全错误关于前登录和其他关于帖子:

  

System.Data.Entity.Core.EntityException:底层提供程序在Open上失败。 ---> System.Data.SqlClient.SqlException:连接超时已过期。尝试使用登录前握手确认时超时时间已过。这可能是因为登录前握手失败或服务器无法及时响应。尝试连接到此服务器所花费的时间是 - [Pre-Login] initialization = 21;握手= 14988; ---> System.ComponentModel.Win32Exception:等待操作超时

     

System.Data.Entity.Core.EntityException:底层提供程序在Open上失败。 ---> System.Data.SqlClient.SqlException:连接超时已过期。在登录后阶段过去了超时时间。在等待服务器完成登录过程并响应时,连接可能已超时;或者在尝试创建多个活动连接时可能会超时。尝试连接到路由目标时发生此故障。尝试连接到原始服务器时花费的持续时间是 - [Pre-Login] initialization = 5;握手= 3098; [登录]初始化= 0;认证= 0; [登录后]完成= 7;尝试连接到此服务器所花费的时间是 - [Pre-Login] initialization = 20;握手= 5; [登录]初始化= 0;认证= 0; [登录后]完成= 11003; ---> System.ComponentModel.Win32Exception:等待操作超时

我使用的是Entity Framework,我的网站托管在Azure Web App上。我已经做了一些挖掘,我发现的大多数SO问题都与实体框架无关,但ADO.Net我找到的几篇文章引导我从DB的基本更新到标准(S0)服务并创建了一个GlobalDBConfig

public class GlobalDBConfig : DbConfiguration
{
    public GlobalDBConfig()
    {
        SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy(2, TimeSpan.FromSeconds(30)));
    }
}

我怎样才能找出其他问题并修复它?这是一个非常简单的数据库,具有简单的查询和非常少的站点流量(每天少于1000次访问)

3 个答案:

答案 0 :(得分:3)

我们通过切换到包含用户"来解决此问题以及SQL Azure上的其他类型的随机超时。在SQL Azure上使用服务器级别登录可能会导致问题:

  

这在SQL DB master中效率不高,用户可以坐在上面   两个不同的SQL服务器可能在两台不同的机器上也   当服务器有多个用户数据库时,master将是   登录过程中的瓶颈,并且在加载下这可能导致   登录的响应时间很长。如果Microsoft正在更新该软件   在机器/服务器上然后主人将无法使用几个   秒和用户数据库的所有登录也可能失败   时间(http://www.sqlindepth.com/contained-users-in-sql-azure-db-v12/

就像你的情况一样,我有疑虑,因为我的数据库没有负载很重,但转换到包含用户无论如何都产生了巨大的差异。

创建这些用户的SQL如下所示(在数据库本身上运行,而不是像创建服务器级别登录一样在master数据库上运行):

Create user ContainedUser with password = 'Password'
ALTER AUTHORIZATION ON SCHEMA::[db_owner] TO [ContainedUser]
ALTER ROLE [db_owner] ADD MEMBER [ContainedUser]

答案 1 :(得分:0)

以下是一些可供尝试的选项:强烈建议尽可能使用(1)和(3)

  1. 用户数据库防火墙规则和包含的用户身份验证
  2. 将连接超时增加到较大值(60-120秒?)
  3. 如果可能,请将您的客户端驱动程序更新到最新版本(7.4及以上版本)

答案 2 :(得分:0)

我们遇到了类似的问题,请注意,Azure上的独立数据库没有自动缩放功能,因为您使用的是Entity Framework,下面是一些建议

  1. 如果您要调用Web-API来获取和使用Azure SQL上的数据库进行交易,请确保在Azure门户上设置" ALLWAYS ON" Web-API的选项。

  2. 然后,如果第一次尝试无法连接,您的客户端应用可能会重试。

  3. 如果由于数据量导致数据库查询导致超时并且索引无法赶上,那么您需要增加命令执行的时间,最重要的是,您将需要需要更新数据库中的统计信息并重新编译数据库中的所有对象。