超时已过。在 Azure 上完成操作之前超时期限已过 sql

Timeout expired. The timeout period elapsed prior to completion of the operation on Azure sql

我需要在 global.asax 应用程序启动事件的 windows azure 上创建一个 sql 数据库,但是我收到了这个错误:

Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.  This failure occurred while attempting to connect to the routing destination. The duration spent while attempting to connect to the original server was - [Pre-Login] initialization=296; handshake=324; [Login] initialization=0; authentication=1; [Post-Login] complete=94;

我的代码如下:

   private void SetupSSM() {
            SqlConnectionStringBuilder connStrBldr = new SqlConnectionStringBuilder
            {
                UserID = SettingsHelper.AzureUsernamedb,
                Password = SettingsHelper.AzurePasswordDb,
                ApplicationName = SettingsHelper.AzureApplicationName,
                DataSource = SettingsHelper.AzureSqlServer
            };

            bool created=DbUtils.CreateDatabaseIfNotExists(connStrBldr.ConnectionString, SettingsHelper.Azureshardmapmgrdb);
            if(created)
            {
                Sharding sharding = new Sharding(SettingsHelper.AzureSqlServer, SettingsHelper.Azureshardmapmgrdb, connStrBldr.ConnectionString);
            }
        }



  public static bool CreateDatabaseIfNotExists(string connectionString, string databaseName)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();

                SqlCommand cmd = new SqlCommand(
                    string.Format("SELECT * FROM sys.databases WHERE [name]=\'{0:S}\'", databaseName),
                    conn);

                if (cmd.ExecuteScalar() == null)
                {
                    SqlCommand cmd2 = new SqlCommand(
                        string.Format("CREATE DATABASE [{0:S}];", databaseName),
                        conn);

                    cmd2.ExecuteNonQuery();

                    return true;
                }
                else
                    return false;
            }
        }

如何增加超时>?是 sql 超时还是由于 sql 没有响应导致的 Web 请求超时?

您可以通过执行以下操作来设置命令超时,您看到的错误是命令超时,很可能您的创建数据库花费的时间超过 30 秒,这是默认超时值。

例如,将超时设置为 300 秒 cmd.CommandTimeout = 300

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout(v=vs.110).aspx

当我们遇到这个问题时,事实证明我们的数据库动力不足。性能监视器显示在我们收到错误期间 DTU 已达到极限。

作为对@Satya_MSFTs 解释的补充,如果您的驱动程序支持,您可以将命令超时添加到连接字符串。这可能看起来像这样(在 ADO.NET 语法中):

_connectionString = "Server=tcp:myenv.database.windows.net,1433;Database=mydb;User ID=myuserid;Password=mypassword;Encrypt=true;Connection Timeout=120;Command Timeout=120;"

然后可以在哪里使用它,例如 Microsoft.Data.SqlClient.SqlConnection,如下所示:

await using var conn = new SqlConnection(_connectionString);

正如其他人所说,您应该在执行此操作之前尝试调整您的数据库。 (不是在 OPs 的情况下。如果它是一次性设置操作,那么增加超时时间然后在 imo 之后减少它是可以的)