在SQL Azure上突然出现了很多等待操作超时问题

本文关键字:等待 操作 问题 超时 Azure SQL 突然 | 更新日期: 2023-09-27 18:07:00

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

System.Data.Entity.Core。EntityException:底层提供程序在打开时失败。--> System.Data.SqlClient.SqlException: Connection Timeout Expired。在尝试使用登录前握手确认时,超时时间已经过了。这可能是因为登录前握手失败,或者服务器无法及时响应。在尝试连接此服务器时花费的时间是- [Pre-Login] initialization=21;握手= 14988;——> System.ComponentModel。Win32Exception: wait operation timed out

System.Data.Entity.Core。EntityException:底层提供程序在打开时失败。--> System.Data.SqlClient.SqlException: Connection Timeout Expired。登录后阶段的超时时间。在等待服务器完成登录过程和响应时,连接可能超时;或者它可能在尝试创建多个活动连接时超时。在尝试连接路由目的地时发生此失败。尝试连接到原始服务器的持续时间为- [Pre-Login] initialization=5;握手= 3098;初始化[登录]= 0;身份验证= 0;[Post-Login]完成= 7;尝试连接此服务器的持续时间是- [Pre-Login] initialization=20;握手= 5;初始化[登录]= 0;身份验证= 0;[Post-Login]完成= 11003;——> System.ComponentModel。Win32Exception: wait operation timed out

我正在使用实体框架,我的网站托管在Azure web应用程序上。我已经做了一些挖掘和大多数SO问题,我发现这与实体框架无关,而是ADO。Net中我发现的几篇文章引导我从基本到标准(S0)的DB服务更新,并创建一个GlobalDBConfig与

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

我怎样才能找出其他问题并解决它?这是一个非常简单的数据库与简单的查询和非常少的流量到网站(少于1000访问一天)

在SQL Azure上突然出现了很多等待操作超时问题

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

这不是非常有效的,因为在SQL数据库主和用户可以坐在两个不同的SQL服务器,可能在两台不同的机器上。也当一个服务器有多个用户数据库时,master将是在登录过程中出现瓶颈,这可能会导致负载不足登录的高响应时间。如果微软正在更新软件在机器/服务器上,主服务器将不可用一段时间秒和所有登录到用户数据库也可能失败时间(http://www.sqlindepth.com/contained-users-in-sql-azure-db-v12/)

在您的例子中,我有我的疑虑,因为我的数据库不是在沉重的负载下,但切换到包含用户无论如何产生了巨大的差异。

创建这些用户的SQL如下所示(在数据库本身上运行,而不是在创建服务器级登录时在主数据库上运行):
Create user ContainedUser with password = 'Password'
ALTER AUTHORIZATION ON SCHEMA::[db_owner] TO [ContainedUser]
ALTER ROLE [db_owner] ADD MEMBER [ContainedUser]

这里有几个选项可以尝试:如果可能的话,我强烈建议使用(1)和(3)

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

我们有类似的问题,请注意,在Azure上的独立数据库上没有自动缩放这样的事情,因为你正在使用实体框架,下面是一些建议

  1. 如果你在Azure SQL上调用Web-API来获取和处理数据库,请确保在Azure门户上设置Web-API的"ALLWAYS on"选项。

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

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