Тайм-аут SQL Azure

У меня есть база данных SQL Azure, которая включает мое веб-приложение.

В виртуальном каталоге находится веб-API 2.0.

Мое веб-приложение делает некоторые легкие db вещи, API отвечает за ввод данных в и веб-приложение часть для пользователей, чтобы войти и просмотреть свои отслеживаемые данные электронной почты.

Довольно простые вещи.

Теперь проблема, кажется, db. Я продолжаю получать эти досадные ошибки времени ожидания Sql.

Странная вещь, это одна и та же ошибка во всем. Следует отметить, что webapiон построен с использованием NHibernate. Веб-портал в основном Entity Framework, использующий сначала код.

Я связался с некоторыми «экспертами» SQL от Microsoft, и единственная полезная информация, которую они предоставили мне, заключается в том, что они указывали каждый раз, когда я получаю эти прерывистые тайм-ауты erros, «writelog» немедленно активизировался.

Теперь это представляет проблему, потому что я не знаю, как диагностировать эту проблему.

Я вставляю» универсальную » трассировку стека, чтобы можно было получить полезную информацию от кого-либо из экспертов SQL Azure.

трассировка стека:

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=2; handshake=9; [Login] initialization=0; authentication=0; [Post-Login] complete=1; ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)...
`

1 ответ

  1. Entity Framework поддерживает настраиваемые стратегии повторных попыток в зависимости от развертывания серверов. При развертывании в Azure необходимо настроить его на использование стратегии SQL Azure, включив этот код:

    public class MyConfiguration : DbConfiguration 
    { 
        public MyConfiguration() 
        { 
            SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy()); 
        } 
    }
    

    Как задокументировано на MSDN: https://msdn.microsoft.com/en-us/data/dn456835.aspx?f=255&MSPPError=-2147217396 .

    Ошибки времени ожидания обычно рассматриваются как временные ошибки в SqlAzureExecutionStrategy. Вы можете увидеть исходный код здесь: https://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework.SqlServer/SqlAzureRetriableExceptionDetector.cs

    Если наблюдаемые ошибки тайм-аута по умолчанию не обрабатываются SqlAzureExecutionStrategy, можно создать свои собственные путем создания подклассов SqlAzureExecutionStrategy и переопределения ShouldRetryOn. Это сообщение в блоге имеет хорошее пошаговое руководство, чтобы сделать именно это.