Тайм-аут SQL Azure - PullRequest
       22

Тайм-аут SQL Azure

2 голосов
/ 23 декабря 2011

При попытке подключения из приложения размещенной веб-роли ASP.NET / Umbraco возникают проблемы с тайм-аутом SQL Azure. Проблема прерывистая. Исключение составляет:

На /microsoft-crm/microsoft-crm-2011.aspx (указано: xxxxxxxxxxx): umbraco.DataLayer.SqlHelperException: исключение Umbraco (DataLayer): Исключение SQL-помощника в ExecuteReader ---> System.Data.SqlClient.SqlException: истекло время ожидания. Тайм-аут период истек до завершения операции или сервер не отвечает. в System.Data.SqlClient.SqlInternalConnection.OnError (SqlException исключение, Boolean breakConnection) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () в System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject stateObj, ошибка UInt32) в System.Data.SqlClient.TdsParserStateObject.ReadSni (DbAsyncResult asyncResult, TdsParserStateObject stateObj) в System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket () в System.Data.SqlClient.TdsParserStateObject.ReadByte () в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlDataReader.ConsumeMetaData () в System.Data.SqlClient.SqlDataReader.get_MetaData () в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, логическое returnStream, логическое асинхронно) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логическое returnStream, строка метод, результат DbAsyncResult) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логическое returnStream, строка метод) в System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior поведение, метод String) в System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior поведение) в Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader (String connectionString, CommandType commandType, String commandText, SqlParameter [] commandParameters) в umbraco.DataLayer.SqlHelpers.SqlServer.SqlServerHelper.ExecuteReader (String commandText, SqlParameter [] параметры) в umbraco.DataLayer.SqlHelper 1.ExecuteReader(String commandText, IParameter[] parameters) --- End of inner exception stack trace --- at umbraco.DataLayer.SqlHelper 1.ExecuteReader (параметры String commandText, IParameter []) в umbraco.macro..ctor (Int32) id) at umbraco.macro.ReturnFromAlias ​​(псевдоним строки) в umbraco.presentation.templateControls.Macro.CreateChildControls ()
в System.Web.UI.Control.EnsureChildControls () в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean: includeStagesAfterAsyncPoint)

Наша строка подключения к SQL Azure:

Сервер = TCP: xxxxxxx.database.windows.net, 1433; Database = DatabaseName; Пользователь ID = UserName @ Servername; Password = Пароль; Trusted_Connection = False; Encrypt = True; TrustServerCertificate = True

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

Обычные проблемы с отладкой тайм-аута SQL Server применимы, даже если вы находитесь в облаке.

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

  • Запомните индексы: они вам понадобятся!
  • Включите трассировку и попытайтесь получить фактический запрос, который выполняется. Оцените план запроса (см. http://www.sql -server-performance.com / 2006 / query-execute-plan-analysis / ) и посмотрите, есть ли что-нибудь очевидное, что можно сделать с помощью структуры таблицы.
  • Убедитесь, что ваш экземпляр SQL Azure находится в том же центре обработки данных, что и ваши веб-роли. Передача большого количества данных происходит медленно (и дорого!) Между центрами обработки данных.
  • Старайтесь избегать шаблонов, когда большое количество данных извлекается из базы данных, только для фильтрации в веб-приложении. Скорее, убедитесь, что база данных выполняет «тяжелую работу».

Вы также можете обнаружить, что при выполнении лотов запросов ваше соединение SQL Azure может быть ограничено. Ссылка на это здесь: http://msdn.microsoft.com/en-us/library/windowsazure/ff394106.aspx#throttling - однако, так как это дает совершенно другой код ошибки, я подозреваю, что здесь не такая ситуация.

0 голосов
/ 12 января 2012

Мы столкнулись с одновременным превышением времени ожидания в SQL Azure, и оказалось, что именно состояние сеанса db приводило к возникновению времени ожидания.

Как только мы переключились на кэш AppFabric для управления состоянием сеанса, у нас больше не было таймаутов.

Более подробная информация здесь: http://our.umbraco.org/forum/core/general/27179-SQL-Azure-connectivity-issues

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...