有时在Azure Web作业中称为Azure SQL数据库上发生的超时错误



我们有一个在Azure上运行的Web应用程序,该应用程序执行其他数据库维护任务,例如创建数据库,删除未使用的数据库等。一切都在Azure SQL上运行。

此应用程序运行24/24,并且每小时执行维护任务。大多数情况下,每一个旋转都很好。但是,任务有时会出现像这样的错误:

  • HTTP错误GatewayTimeOut:网关在指定的时间段内未从" Microsoft.sql"收到响应
  • http错误serviceunavailable:请求时机
  • sqlexception:执行超时到期。在完成操作或服务器完成之前已经过的超时时间未响应。
  • sqlexception:与服务器成功建立了连接,但随后在前login握手期间发生了错误

发生这种情况时似乎无法到达数据库。

我们很高兴有人可以帮助我们调试问题。

预先感谢您。

有瞬态错误和其他类型的错误是Azure SQL数据库。瞬态故障错误通常显示为来自客户端程序的以下错误消息之一:

•服务器上的数据库目前尚不可用。请稍后重试连接。如果问题持续存在,请联系客户支持,并为他们提供

的会话跟踪ID

•服务器上的数据库目前尚不可用。请稍后重试连接。如果问题持续存在,请与客户支持联系,并为他们提供会话跟踪ID。(Microsoft SQL Server,错误:40613)

•现有连接被远程主机强行关闭。

•System.Data.Entity.Core.Core.EntityCommandExecutionException:执行命令定义时发生了错误。有关详细信息,请参见内部例外。---> system.data.sqlclient.sqlexception:接收服务器结果时发生了传输级别的错误。(提供商:会话提供商,错误:19-物理连接不可用)

•与辅助数据库的连接尝试失败,因为数据库正在重新配置的过程中,并且在主数据库上的主动横向中间忙于应用新页面。

因为这些错误,此处有更多解释。有必要在连接到Azure SQL数据库的应用程序上创建重试逻辑。

public void HandleTransients()
{
    var connStr = "some database";
    var _policy = RetryPolicy.Create < SqlAzureTransientErrorDetectionStrategy(
        retryCount: 3,
        retryInterval: TimeSpan.FromSeconds(5));
    using (var conn = new ReliableSqlConnection(connStr, _policy))
    {
        // Do SQL stuff here.
    }
}

更多关于如何在此处创建重试逻辑的更多信息。

节流也是超时的原因。以下查询可能会帮助您了解工作负载对Azure SQL数据库的影响。

SELECT 
    (COUNT(end_time) - SUM(CASE WHEN avg_cpu_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'CPU Fit Percent'
    ,(COUNT(end_time) - SUM(CASE WHEN avg_log_write_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'Log Write Fit Percent'
    ,(COUNT(end_time) - SUM(CASE WHEN avg_data_io_percent > 80 THEN 1 ELSE 0 END) * 1.0) / COUNT(end_time) AS 'Physical Data Read Fit Percent'
FROM sys.dm_db_resource_stats

- 服务级别目标(SLO)为99.9%&lt; =转到下一个层

相关内容

  • 没有找到相关文章

最新更新