突然在SQL Azure上获得大量等待操作超时问题

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

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问题与entity framework无关,但ADO.Net我找到的几篇post让我更新了从DB的基本到标准(S0)服务并创建了一个GlobalDBConfig

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

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

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

这在SQL DB master中效率不高,用户可以在两台不同的计算机上坐在两个不同的SQL服务器上。 此外,当服务器具有多个用户数据库时,master将成为登录过程中的瓶颈,并且在加载时这可能导致登录的高响应时间。 如果Microsoft正在更新机器/服务器上的软件,那么master将在几秒钟内不可用,并且此时对用户数据库的所有登录也会失败( 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)和(3)

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

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

  1. 如果要调用Web-API以在Azure SQL上获取数据库并与之进行交易,请确保在Azure门户上为Web-API设置“ALLWAYS ON”选项。

  2. 然后,如果第一次尝试连接失败,您的客户端应用程序应该重试。

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